首页 > 后端开发 > Golang > 正文

Go 如何处理具有匿名结构的指针切片的初始化?

Barbara Streisand
发布: 2024-10-31 15:39:13
原创
371 人浏览过

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>
登录后复制

这等价to:

<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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!