嵌入式結構體在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中文網其他相關文章!