Go 语言中,用 var 和 type 定义结构体有什么区别?
var 和 type 一个结构的区别
在 go 语言中,结构体是用于组合数据的强大工具。而 var 和 type 在定义结构体时各有其用途。
var
关键字 var 用于声明变量,也可用于声明结构体。采用 var 声明结构体时,可以使用匿名结构体语法,如下所示:
var people struct { name string }
这种写法可以让你在没有定义明确类型的情况下快速创建结构体变量。它类似于 java/c# 中的匿名类型,在 go 语言中称为匿名结构体。
type
关键字 type 则用于定义类型,包括结构体类型。使用 type 声明结构体时,需要为其指定一个类型名称,如下所示:
type people struct { name string }
这个代码定义了一个名为 people 的结构体类型。之后,你可以使用该类型名称来声明结构体变量:
var people people
匿名结构体(var 声明)和命名结构体(type 声明)之间的区别在于:
- 匿名结构体没有类型名称,只存在于声明它的作用域内。
- 命名结构体具有类型名称,可以跨多个作用域使用。
示例
以下示例说明了两种写法的异同:
// 定义一个匿名结构体 var people = struct{ name string }{name: "John"} // 定义一个命名结构体 type Person struct{ name string } var p = Person{name: "Mary"} fmt.Println(people) // 输出: {John} fmt.Println(p) // 输出: {Mary}
在这个示例中,由于匿名结构体只存在于其声明的作用域内,因此在函数外部无法访问 people 变量。而命名结构体类型 person 可以跨多个作用域使用。