首頁 > 後端開發 > Golang > Go 如何處理具有匿名結構的指標切片的初始化?

Go 如何處理具有匿名結構的指標切片的初始化?

Barbara Streisand
發布: 2024-10-31 15:39:13
原創
448 人瀏覽過

How does Go handle the initialization of a slice of pointers with anonymous structs?

Go 中以匿名結構初始化指標切片

《Go 程式語言》第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>
登入後複製

初始化指標切片的語法類似於結構體切片的初始化,只是在元素類型之前加上 *。然而,在底層,該語法實際上是在編譯時初始化具有指定類型的值切片的捷徑。

<code class="go">f := []<type>{{...}, {...}}</code>
登入後複製

這相當於以下內容:

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
登入後複製

對於指針,它變成:

<code class="go">f := []*<type>{{...}, {...}}</code>
登入後複製

這相當於:

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>
登入後複製

這意味著匿名結構體語法可以方便地初始化指標切片。

但請注意,在初始化指標切片時,值可以是匿名結構類型,只要類型在切片內保持一致即可。

<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>
登入後複製

混合和匹配匿名不允許使用常規結構的結構,如下例所示:

<code class="go">e := []*Ex{{1, 2}, &amp;Ex{3, 4}} // Syntax Error!</code>
登入後複製

出現這種情況是因為編譯器無法從指向結構的指針推斷匿名結構的類型。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板