Heim > Backend-Entwicklung > Golang > Wie greife ich auf Felder einer anonymen Struktur zu, die als Schnittstelle ohne Methoden in Golang übergeben wird?

Wie greife ich auf Felder einer anonymen Struktur zu, die als Schnittstelle ohne Methoden in Golang übergeben wird?

Linda Hamilton
Freigeben: 2024-11-04 11:54:01
Original
932 Leute haben es durchsucht

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

Schnittstelle ohne Methoden: Zugriff auf benutzerdefinierten Typ in Golang

In Golang können Sie anonyme Strukturen erstellen und diese als Argumente an Funktionen übergeben, die einen Schnittstellentyp akzeptieren. Wenn für die Schnittstelle jedoch keine Methoden definiert sind, können Sie nicht direkt auf die Felder der anonymen Struktur zugreifen.

Betrachten Sie das folgende Codebeispiel:

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>
Nach dem Login kopieren

In diesem Beispiel übergeben wir eine anonyme Struktur als v-Argument an NewJob. Die Funktion Custom ruft den mit dem Namen „pene“ verknüpften benutzerdefinierten Wert ab und gibt ihn als Schnittstelle zurück{}.

Wenn wir versuchen, auf das ID-Feld der anonymen Struktur innerhalb der Goroutine zuzugreifen, stoßen wir auf den Fehler „ t.Id undefiniert". Dies liegt daran, dass der Typ interface{} keine definierten Methoden hat, sodass wir ihn nicht wie einen konkreten Typ behandeln können.

Um auf die Felder der anonymen Struktur zuzugreifen, müssen wir sie einem kompatiblen Typ zuordnen . In diesem Fall wissen wir, dass v eine anonyme Struktur mit einem Id-Feld vom Typ int enthält. Wir können „assesser“ mit der folgenden Syntax eingeben:

<code class="go">id := v.(struct{Id int}).Id</code>
Nach dem Login kopieren

Dadurch wird der Interface{}-Wert v in eine konkrete Struktur mit einem Id-Feld konvertiert, sodass wir direkt darauf zugreifen können.

Durch Typ-Assertion des Werts interface{} können wir auf die Felder der anonymen Struktur zugreifen und sie nach Bedarf verwenden.

Das obige ist der detaillierte Inhalt vonWie greife ich auf Felder einer anonymen Struktur zu, die als Schnittstelle ohne Methoden in Golang übergeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage