首頁 >後端開發 >Golang >如何使用 Go 中的現有實例初始化嵌入式結構體欄位?

如何使用 Go 中的現有實例初始化嵌入式結構體欄位?

DDD
DDD原創
2024-11-12 06:03:02973瀏覽

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"?
}

解決方案

要解決此問題,有兩種可行的方法options:

選項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