Heim >Backend-Entwicklung >Golang >Wie greife ich auf Felder einer anonymen Struktur zu, die als Schnittstelle ohne Methoden in Golang übergeben wird?
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>
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>
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!