Подтвердить что ты не робот

Инициализировать встроенную структуру в 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?

4b9b3361

Ответ 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 будет ссылаться на это поле.