首頁 >後端開發 >Golang >如何正確初始化Go中的嵌入式結構體?

如何正確初始化Go中的嵌入式結構體?

Patricia Arquette
Patricia Arquette原創
2024-12-24 10:21:24580瀏覽

How to Correctly Initialize Embedded Structs in Go?

Golang 嵌入式結構類型:了解語法和用法

在Go 中使用嵌入式結構類型時,理解它們的語法和用法至關重要正確使用。本文解決了無法初始化嵌入結構的問題。

問題:

考慮以下類型:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

嘗試使用語法初始化ErrorValue:

e := ErrorValue{Name: "alpha", Value: 123, Error: err}

嘗試使用語法初始化ErrorValue:

結果錯誤。

解決方案:

嵌入類型,也稱為未命名字段,透過其非限定類型名稱來引用。在提供的程式碼中,初始化 ErrorValue 的語法不正確。
e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

根據 Go 語言規範,應使用不含欄位名稱的型別名稱來初始化嵌入欄位。以下是正確的語法:

e := ErrorValue{NamedValue{"fine", 33}, err}

或者,您可以省略複合文字中的欄位名稱:

package main

import "fmt"

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

func main() {
    e := ErrorValue{NamedValue{Name: "alpha", Value: 123}, fmt.Errorf("some error")}
    fmt.Println(e)
}
範例:

{NamedValue:{Name:alpha Value:123} Error:some error}

輸出:

透過理解了解嵌入式結構類型的語法和用法,您可以在 Go 程式中有效地利用它們。

以上是如何正確初始化Go中的嵌入式結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn