"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 리플렉션을 사용하여 Go의 인터페이스에서 메서드 이름 목록을 어떻게 검색합니까?

리플렉션을 사용하여 Go의 인터페이스에서 메서드 이름 목록을 어떻게 검색합니까?

2024년 11월 11일에 게시됨
검색:753

How do you retrieve a list of method names from an interface in Go using reflection?

인터페이스에서 메서드 이름 목록 가져오기

Go에서 리플렉션을 사용하면 런타임에 프로그램의 내부 구조를 검사하고 조작할 수 있습니다. . 여기에는 메소드 이름과 같은 인터페이스 유형에 대한 정보에 액세스하는 기능이 포함됩니다.

다음 인터페이스를 고려하십시오.

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

리플렉션을 사용하여 이 인터페이스의 메소드 이름 목록을 얻으려면:

  1. 인터페이스 유형에 대한 Reflect.Type을 얻으십시오:
t := reflect.TypeOf((*FooService)(nil)).Elem()

이 줄은 FooService 인터페이스를 구현하는 구체적인 유형에 대한 Reflect.Type을 검색합니다.

  1. 메서드 수 검색:
for i := 0; i 

NumMethod() 함수는 인터페이스의 메서드 수를 반환합니다.

  1. 메서드 이름 가져오기:
s = append(s, t.Method(i).Name)

Method(i) 함수는 Reflect.Method 인덱스 i의 메서드를 나타내는 메서드 개체입니다. 이 개체의 이름 필드에는 메서드 이름이 포함됩니다.

결과 목록 s에는 메서드 이름 ["Foo1", "Foo2"]가 포함됩니다.

설명:

  • (*FooService)(nil) 구문은 FooService 인터페이스의 익명 인스턴스에 대한 포인터를 만드는 데 사용됩니다. 이는 인터페이스에 대한 Reflect.Type을 얻는 데 필요합니다.
  • Elem() 메서드는 인터페이스 유형 자체 대신 인터페이스를 구현하는 구체적인 유형에 대한 Reflect.Type을 반환합니다.
  • NumMethod() 함수는 구체적인 유형이 추가 메소드를 구현하는 경우에도 인터페이스에 선언된 메소드 수를 반환합니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3