首页 >后端开发 >Golang >如何使用 Go 中的现有实例初始化嵌入式结构体字段?

如何使用 Go 中的现有实例初始化嵌入式结构体字段?

DDD
DDD原创
2024-11-12 06:03:02978浏览

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

Go 中嵌入式结构体初始化遇到的问题

嵌入式结构体在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn