嵌入式结构体在 Go 中提供了显着的优势,但它们有时会带来独特的挑战,特别是在初始化期间。考虑以下场景,其中包含匿名内部结构的结构必须使用内部结构的现有实例进行初始化。
type MyRequest struct { Request http.Request PathParams map[string]string } func New(origRequest *http.Request, pathParams map[string]string) *MyRequest { // How to initialize "Request" field with "origRequest"? }
要解决此问题,有两种可行的方法选项:
选项1:
req := new(MyRequest) req.PathParams = pathParams req.Request = *origRequest
在此方法中,使用 new 创建 MyRequest 的新实例。 PathParams 字段使用提供的 pathParams 映射进行初始化。匿名内部结构体Request通过显式将origRequest的解引用值分配给它来初始化。
选项2:
req := &MyRequest{ PathParams: pathParams, Request: origRequest, }
这个替代方案方法使用复合文字语法来创建 MyRequest 的新实例。 PathParams 和 Request 字段都在文字中初始化。需要注意的是,Request 字段的初始化不需要取消引用。
当匿名内部结构嵌入到更大的结构中时,嵌入字段继承外部结构的名称。在这种情况下,PathParams 和 Request 都成为 MyRequest 的字段。有关更多信息,请参阅 Go 规范中的 [Struct Types](https://go.dev/ref/spec#Struct_types)。
以上是如何使用 Go 中的现有实例初始化嵌入式结构体字段?的详细内容。更多信息请关注PHP中文网其他相关文章!