在Go中初始化嵌入式结构

时间:2012-09-21 20:06:41

标签: struct 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

初始化内部结构

3 个答案:

答案 0 :(得分:33)

req := new(MyRequest)
req.PathParams = pathParams
req.Request = origRequest

...或

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

有关嵌入以及如何命名字段的详细信息,请参阅:http://golang.org/ref/spec#Struct_types

答案 1 :(得分:16)

怎么样:

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

它显示而不是

New(foo, bar)

您可能更喜欢

&MyRequest{*foo, bar}

直接

答案 2 :(得分:6)

正如Jeremy所示,匿名字段的“名称”与字段的类型相同。因此,如果x的值是包含匿名int的结构,则x.int将引用该字段。