인터페이스 유형에서 메서드 이름 얻기
프로그래밍 세계에서 리플렉션을 사용하면 런타임 시 유형과 개체에 대한 정보에 액세스할 수 있습니다. 일반적인 시나리오 중 하나는 인터페이스 유형에서 메서드 이름을 검색하는 것입니다. 다음과 같은 인터페이스 정의가 있다고 가정합니다.
<code class="go">type FooService interface { Foo1(x int) int Foo2(x string) string }</code>
리플렉션을 사용하여 메서드 이름 목록(이 경우에는 ["Foo1", "Foo2"])을 생성하는 것이 목표입니다.
해결책:
이를 달성하려면 다음 단계가 필요합니다.
인터페이스 유형의 Reflect.Type을 얻습니다.
<code class="go">type FooService interface {...} t := reflect.TypeOf((*FooService)(nil)).Elem()</code>
이 줄은 기본 구체적인 유형인 FooService 인터페이스의 반사 유형을 검색합니다.
다음 유형의 메서드를 통해 반복합니다.
<code class="go">for i := 0; i < t.NumMethod(); i++ {</code>
NumMethod 메서드는 메서드 수를 반환하므로 각 메서드를 반복할 수 있습니다.
각 메서드 이름 검색:
<code class="go">name := t.Method(i).Name</code>
슬라이스에 메서드 이름 추가:
<code class="go">s = append(s, name)</code>
이렇게 하면 메서드 이름이 슬라이스에 누적됩니다.
모두 합치기:
<code class="go">type FooService interface { Foo1(x int) int Foo2(x string) string } func main() { t := reflect.TypeOf((*FooService)(nil)).Elem() var s []string for i := 0; i < t.NumMethod(); i++ { name := t.Method(i).Name s = append(s, name) } fmt.Println(s) // Output: [Foo1 Foo2] }</code>
위 내용은 Go에서 리플렉션을 사용하여 인터페이스 유형에서 메서드 이름을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!