在Go中初始化嵌入式结构

dea*_*mon 31 struct go

我有以下struct内容包含net/http.Request:

type MyRequest struct {
    http.Request
    PathParams map[string]string
}
Run Code Online (Sandbox Code Playgroud)

现在我想http.Request在以下函数中初始化匿名内部结构:

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

如何使用参数初始化内部结构origRequest

Jer*_*all 34

req := new(MyRequest)
req.PathParams = pathParams
req.Request = origRequest
Run Code Online (Sandbox Code Playgroud)

要么...

req := &MyRequest{
  PathParams: pathParams
  Request: origRequest
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不,这是因为字段的类型与origRequest的类型不同.请改用*origRequest,问题就消失了. (3认同)

zzz*_*zzz 18

关于什么:

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

它表明,而不是

New(foo, bar)
Run Code Online (Sandbox Code Playgroud)

你可能更喜欢

&MyRequest{*foo, bar}
Run Code Online (Sandbox Code Playgroud)

直.


Mat*_*att 7

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