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

如何在 Golang 中使用匿名结构初始化指针切片?

Mary-Kate Olsen
发布: 2024-11-01 15:53:02
原创
948 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!