Heim  >  Artikel  >  Backend-Entwicklung  >  Können anonyme Strukturen in Go Methoden haben?

Können anonyme Strukturen in Go Methoden haben?

王林
王林nach vorne
2024-02-08 20:54:03798Durchsuche

Go 中匿名结构体可以有方法吗?

Frageninhalt

var anonymousStruct = &struct {
    Value int
    Test  func()
}{
    Test: func() {
        fmt.Println(anonymousStruct.Value)
    },
}

Beim Betrachten des Codes bin ich in Zeile 6 auf ein Problem gestoßen: Die Funktion „Test“ kann nicht auf den Parameter „Wert“ zugreifen. Gibt es eine Möglichkeit, einer Funktion Zugriff auf „Value“ zu gewähren, ohne ihn erneut als Parameter zu übergeben, ähnlich wie bei „anonymousStruct.Test(anonymousStruct.Value)“? Mit anderen Worten: Können anonyme Strukturen in Go Methoden anstelle von Funktionen haben? Danke für deine Beratung.


Richtige Antwort


Sie können eine Methode nicht als anonyme Struktur deklarieren, da die Methodendeklaration nur benannte Typen (als Empfänger) enthalten kann.

Darüber hinaus können anonyme Strukturen Methoden haben, wenn sie in Typen eingebettet sind, die Methoden haben (sie werden hochgestuft).

In Ihrem Beispiel können Sie in einem zusammengesetzten Literal nicht auf eine anonymousStruct Variable verweisen, da sich die Variable erst im Gültigkeitsbereich befindet, nachdem sie deklariert wurde (nach dem zusammengesetzten Literal). Siehe Spezifikation: Deklarationen und Bereiche ; Beispiel: Eine rekursive Funktion innerhalb einer Funktion definieren. Los geht's .

Zum Beispiel können Sie Funktionsfelder nach der Variablendeklaration initialisieren:

var anonymousStruct = &struct {
    Value int
    Test  func()
}{Value: 3}

anonymousStruct.Test = func() {
    fmt.Println(anonymousStruct.Value)
}

anonymousStruct.Test()

Dies wird ausgegeben (versuchen Sie es auf Go Playground):

3

Das obige ist der detaillierte Inhalt vonKönnen anonyme Strukturen in Go Methoden haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen