Heim  >  Artikel  >  Backend-Entwicklung  >  Wie listet man die in einer Go-Schnittstelle definierten Methodennamen programmgesteuert auf?

Wie listet man die in einer Go-Schnittstelle definierten Methodennamen programmgesteuert auf?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 08:51:29931Durchsuche

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

Methodennamen in einem Schnittstellentyp auflisten

In Go definieren Schnittstellen einen Vertrag von Methoden, die ein Typ implementieren muss. Wenn Sie zur Laufzeit mit Schnittstellen interagieren, müssen Sie möglicherweise auf die Namen ihrer Methoden zugreifen.

Problem:

Berücksichtigen Sie die folgende Schnittstellendefinition:

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

Wie können Sie programmgesteuert eine Liste der Methodennamen, d. h. ["Foo1", "Foo2"], aus der FooService-Schnittstelle generieren?

Antwort:

Um die Liste der Methodennamen von einem Schnittstellentyp abzurufen, können Sie Laufzeitreflexion verwenden:

<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>

Erklärung:

  1. reflect.TypeOf( (*FooService)(nil)).Elem() ruft den Reflect.Type der Schnittstelle ab.
  2. t.NumMethod() gibt die Anzahl der Methoden in der Schnittstelle zurück.
  3. t.Method (i) ruft die i-te Methode der Schnittstelle ab.
  4. t.Method(i).Name gibt den Namen der Methode zurück.

Playground-Beispiel:

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

Tipp:

Lesen Sie die Dokumentation zum Thema „Wie bekomme ich?“ der „reflect.Type“ einer Schnittstelle? für Einblicke zum Erhalten des Reflect.Type einer Schnittstelle.

Das obige ist der detaillierte Inhalt vonWie listet man die in einer Go-Schnittstelle definierten Methodennamen programmgesteuert auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn