42 Stimmen

Initialisieren von eingebetteter Struktur in Go

Ich habe die folgende struct, die einen net/http.Request enthält:

type MyRequest struct {
    http.Request
    PathParams map[string]string
}

Jetzt möchte ich die anonyme innere Struktur http.Request in der folgenden Funktion initialisieren:

func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
    req := new(MyRequest)
    req.PathParams = pathParams
    return req
}

Wie kann ich die innere Struktur mit dem Parameter origRequest initialisieren?

41voto

Jeremy Wall Punkte 21945
req := new(MyRequest)
req.PathParams = pathParams
req.Request = origRequest

oder...

req := &MyRequest{
  PathParams: pathParams
  Request: origRequest
}

Siehe: http://golang.org/ref/spec#Struct_types für mehr Informationen über Einbettung und wie die Felder benannt werden.

21voto

zzzz Punkte 83651

Was ist mit:

func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
        return &MyRequest{*origRequest, pathParams}
}

Es zeigt, dass anstelle von

New(foo, bar)

du möchtest vielleicht einfach

&MyRequest{*foo, bar}

direkt verwenden.

7voto

Matt Punkte 1414

Wie Jeremy oben zeigt, ist der "Name" eines anonymen Feldes der gleiche wie der Typ des Feldes. Daher würde beispielsweise bei einem Wert von x, der eine Struktur mit einem anonymen int enthält, x.int auf dieses Feld verweisen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X