Eingebettete Strukturen bieten in Go erhebliche Vorteile, können jedoch manchmal besondere Herausforderungen darstellen, insbesondere während der Initialisierung. Stellen Sie sich das folgende Szenario vor, in dem eine Struktur, die eine anonyme innere Struktur enthält, mit einer vorhandenen Instanz der inneren Struktur initialisiert werden muss.
type MyRequest struct { Request http.Request PathParams map[string]string } func New(origRequest *http.Request, pathParams map[string]string) *MyRequest { // How to initialize "Request" field with "origRequest"? }
Um dieses Problem anzugehen, gibt es zwei mögliche Lösungen Optionen:
Option 1:
req := new(MyRequest) req.PathParams = pathParams req.Request = *origRequest
Bei diesem Ansatz wird eine neue Instanz von MyRequest mit new erstellt. Das PathParams-Feld wird mit der bereitgestellten pathParams-Zuordnung initialisiert. Die anonyme innere Struktur Request wird initialisiert, indem ihr explizit der dereferenzierte Wert von origRequest zugewiesen wird.
Option 2:
req := &MyRequest{ PathParams: pathParams, Request: origRequest, }
Diese Alternative Der Ansatz verwendet eine zusammengesetzte Literalsyntax, um eine neue Instanz von MyRequest zu erstellen. Sowohl die PathParams- als auch die Request-Felder werden innerhalb des Literals initialisiert. Es ist wichtig zu beachten, dass das Feld „Anfrage“ initialisiert wird, ohne die Notwendigkeit einer Dereferenzierung.
Wenn eine anonyme innere Struktur in eine größere Struktur eingebettet ist , erben die eingebetteten Felder den Namen der äußeren Struktur. In diesem Fall werden sowohl PathParams als auch Request zu Feldern von MyRequest. Weitere Informationen finden Sie in der Go-Spezifikation zu [Strukturtypen](https://go.dev/ref/spec#Struct_types).
Das obige ist der detaillierte Inhalt vonWie können Sie ein eingebettetes Strukturfeld mithilfe einer vorhandenen Instanz in Go initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!