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>{&<type>{...}, &<type>{...}}</code>
這意味著匿名結構體語法可以方便地初始化指標切片。
但請注意,在初始化指標切片時,值可以是匿名結構類型,只要類型在切片內保持一致即可。
<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}} b := []Ex{{1, 2}, {3, 4}} c := []*Ex{&Ex{1, 2}, &Ex{3, 4}} d := []*Ex{{1, 2}, {3, 4}}</code>
混合和匹配匿名不允許使用常規結構的結構,如下例所示:
<code class="go">e := []*Ex{{1, 2}, &Ex{3, 4}} // Syntax Error!</code>
出現這種情況是因為編譯器無法從指向結構的指針推斷匿名結構的類型。
以上是Go 如何處理具有匿名結構的指標切片的初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!