首頁  >  文章  >  後端開發  >  如何在 Golang 中使用匿名結構初始化指標切片?

如何在 Golang 中使用匿名結構初始化指標切片?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 15:53:02931瀏覽

How to Initialize Slices of Pointers with Anonymous Structs in Golang?

在Golang 中使用匿名結構體初始化指標切片

在GOPL 第7 章(第7.6 節)的程式碼片段中,一個匿名結構體用於初始化一個指標切片:

<code class="go">var tracks = []*Track{
    {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
    {"Go", "Moby", "Moby", 1992, length("3m37s")},
    {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
    {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
}</code>

這可能看起來很混亂,因為Track 類型已經定義,並且語法{1, 2} 似乎正在初始化一個新的未命名結構。但是,此語法是一種快捷方式,用於初始化切片類型的元素,而無需明確定義結構。

「{}」表示法本質上等同於:

<code class="go">type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}</code>

其中型名 (Ex) 省略。即使在初始化指標切片時,此語法也適用:

<code class="go">c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}</code>

在這些情況下,& 運算子會自動套用於匿名結構以建立指標。

但是,嘗試初始化引用匿名結構(不含& 運算子)的指標切片將導致語法錯誤:

<code class="go">f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!</code>

要使用匿名結構初始化指標切片,必須轉換匿名結構指向指針,或可以完全省略指針:

<code class="go">f := []struct{
    A, B int
}{
    {1, 2}, {3, 4}
}
// or with pointers...
g := []*struct{
    A, B int
}{
    {1, 2}, {3, 4}
}</code>

這裡,匿名結構嵌入在指針切片中,而不需要單獨的類型定義。此語法通常用於初始化 Golang 中的映射和其他集合中的匿名結構。

以上是如何在 Golang 中使用匿名結構初始化指標切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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