结构体(Struct)
struct
是 Go 语言中用于定义一组字段的集合,可以用来组合多个数据类型。struct
类似于其他语言中的类或记录类型,它能够将不同类型的数据组合在一起。
结构体可以进行的操作
- 定义结构体类型:通过
type
关键字定义结构体类型。 - 创建结构体实例:可以通过字面值或
new()
函数创建结构体实例。 - 访问和修改字段:使用点号
.
访问或修改结构体的字段。 - 匿名字段:可以在结构体中嵌入匿名字段,通常用于组合其他结构体类型。
示例代码
// 定义结构体
type Person struct {
Name string
Age int
}
// 创建结构体实例
p1 := Person{Name: "Alice", Age: 30}
p2 := Person{"Bob", 25} // 字段顺序初始化
// 访问结构体字段
fmt.Println(p1.Name) // 输出 "Alice"
fmt.Println(p2.Age) // 输出 25
// 修改结构体字段
p1.Age = 31
fmt.Println(p1.Age) // 输出 31
// 使用 new() 创建结构体指针
p3 := new(Person)
p3.Name = "Charlie"
p3.Age = 22
fmt.Println(p3.Name, p3.Age) // 输出 "Charlie 22"
// 嵌套结构体
type Employee struct {
Person
Position string
}
// 创建 Employee 实例并访问字段
e := Employee{Person: Person{Name: "Dave", Age: 40}, Position: "Manager"}
fmt.Println(e.Name) // 访问嵌入的 Person 字段
fmt.Println(e.Position)
特别注意
- 值类型:
struct
是值类型,赋值和传递时会复制整个结构体。如果需要修改原始结构体,可以传递指针。 - 匿名字段:结构体可以嵌入其他结构体作为匿名字段,这样可以实现字段的组合和继承。
- 初始化顺序:使用结构体字面值初始化时,必须按定义顺序提供字段值,或者使用
FieldName: value
的方式来初始化。
总结
- 结构体是组合多个不同类型数据的集合,通过字段来组织数据。
- 可以创建结构体实例并通过点号
.
访问和修改字段,支持嵌套和组合。 - 使用匿名字段可以让结构体继承其他结构体的字段。