Go语言不同变量类型声明的区别:两种Struct写法对比
两种Go语言变量声明写法的核心差异
嘿,刚学Go几天就关注到这个细节,真的很赞!我来帮你把这两种写法的区别掰扯清楚:
1. var result []Struct 的本质
- 这是声明了一个切片类型的变量,类型为
[]Struct(简单说就是「存放Struct类型元素的动态数组」) - 变量的初始值是切片的零值
nil,此时它既没有底层数组,长度和容量也都是0 - 后续可以通过
append()方法向这个切片中添加Struct实例,比如:result = append(result, Struct{Name: "test", Age: 20})
2. result := Struct{} 的本质
- 这是用Go的短变量声明语法创建了一个单个Struct实例,类型就是
Struct本身 - 这个变量是一个具体的结构体对象,所有字段都会被初始化为对应类型的零值(比如字符串字段是空串,整数字段是0)
- 它只能存放一个Struct对象,如果想存储多个同类型结构体,就得用前面的切片写法
可查阅的官方参考内容
你可以直接看Go官方文档里的这些部分:
- 《Go语言规范》中的「变量声明」和「切片类型」章节,里面详细定义了变量声明的规则和切片的本质
- 《Effective Go》中的「切片」章节,有很多实用的示例和最佳实践,能帮你更好理解切片的使用场景
内容的提问来源于stack exchange,提问作者Arief Karfianto
相关产品推荐
相关产品推荐

