Инициализировать встроенную структуру в Go
У меня есть следующий struct
, который содержит net/http.Request
:
type MyRequest struct {
http.Request
PathParams map[string]string
}
Теперь я хочу инициализировать анонимную внутреннюю структуру http.Request
в следующей функции:
func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
req := new(MyRequest)
req.PathParams = pathParams
return req
}
Как инициализировать внутреннюю структуру с параметром origRequest
?
Ответы
Ответ 1
Как насчет:
func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
return &MyRequest{*origRequest, pathParams}
}
Это показывает, что вместо
New(foo, bar)
вы можете предпочесть просто
&MyRequest{*foo, bar}
непосредственно.
Ответ 2
req := new(MyRequest)
req.PathParams = pathParams
req.Request = origRequest
или...
req := &MyRequest{
PathParams: pathParams
Request: origRequest
}
Смотрите: http://golang.org/ref/spec#Struct_types для получения дополнительной информации о встраивании и о том, как поля получают имена.
Ответ 3
Как показывает Джереми выше, "имя" анонимного поля совпадает с типом поля. Поэтому, если значение x является структурой, содержащей анонимный int, тогда x.int будет ссылаться на это поле.