>  기사  >  백엔드 개발  >  Go 인터페이스에 정의된 메소드 이름을 프로그래밍 방식으로 어떻게 나열합니까?

Go 인터페이스에 정의된 메소드 이름을 프로그래밍 방식으로 어떻게 나열합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 08:51:29940검색

How do you programmatically list the method names defined in a Go interface?

인터페이스 유형의 메소드 이름 나열

Go에서 인터페이스는 유형이 구현해야 하는 메소드 계약을 정의합니다. 런타임 시 인터페이스와 상호 작용할 때 해당 메서드의 이름에 액세스해야 할 수도 있습니다.

문제:

다음 인터페이스 정의를 고려하세요.

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

FooService 인터페이스에서 메소드 이름 목록(예: ["Foo1", "Foo2"])을 프로그래밍 방식으로 생성하려면 어떻게 해야 합니까?

답변:

인터페이스 유형에서 메서드 이름 목록을 검색하려면 런타임 리플렉션을 사용할 수 있습니다.

<code class="go">t := reflect.TypeOf((*FooService)(nil)).Elem()
var s []string
for i := 0; i < t.NumMethod(); i++ {
    s = append(s, t.Method(i).Name)
}</code>

설명:

  1. reflect.TypeOf( (*FooService)(nil)).Elem()은 인터페이스의 Reflect.Type을 검색합니다.
  2. t.NumMethod()는 인터페이스의 메서드 수를 반환합니다.
  3. t.Method (i) 인터페이스의 i번째 메서드를 검색합니다.
  4. t.Method(i).Name은 메서드의 이름을 반환합니다.

Playground 예:

https://go.dev/play/p/6cXnZKiKVw1

팁:

"얻는 방법" 문서를 참조하세요. Reflect.인터페이스 유형이요?" 인터페이스의 Reflect.Type을 얻는 방법에 대한 통찰력을 얻으세요.

위 내용은 Go 인터페이스에 정의된 메소드 이름을 프로그래밍 방식으로 어떻게 나열합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.