在Go中初始化嵌入式结构

I have the following struct which contains a net/http.Request:

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

Now I want to initialize the anonymous inner struct http.Request in the following function:

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

How can I initialize the inner struct with the parameter origRequest?

What about:

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

It shows that instead of

New(foo, bar)

you might prefer just

&MyRequest{*foo, bar}

directly.

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

or...

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

See: http://golang.org/ref/spec#Struct_types for more about embedding and how the fields get named.

As Jeremy shows above, the "name" of an anonymous field is the same as the type of the field. So if the value of x were a struct containing an anonymous int, then x.int would refer to that field.