结构体是Go语言中组织数据的核心,通过type和struct定义包含多个字段的类型,如Person{Name, Age, City};支持按顺序、指定字段、零值及指针等多种初始化方式;可绑定值接收者或指针接收者方法,实现行为封装,其中值接收者用于只读操作,指针接收者可修改数据;字段首字母大写则对外可导出;合理使用结构体能提升代码清晰度与可维护性。

在Go语言中,结构体(struct)是构建复杂数据类型的核心工具,常用于表示具有多个字段的对象。它不仅支持字段定义与多种初始化方式,还能绑定方法,实现类似面向对象编程中的“类”行为。下面详细介绍结构体的定义、初始化以及方法绑定的基本用法。
结构体定义
使用 type 和 struct 关键字定义结构体。结构体由多个字段组成,每个字段有名称和类型。
type Person struct {
Name string
Age int
City string
}
上述代码定义了一个名为 Person 的结构体,包含姓名、年龄和城市三个字段。字段首字母大写表示对外公开(可导出),小写则为私有字段。
结构体初始化
Go提供了多种初始化结构体的方式,灵活适用于不同场景。
立即学习“go语言免费学习笔记(深入)”;
- 按顺序初始化:字段值按定义顺序赋值,需保证数量和类型匹配。
p1 := Person{"Alice", 25, "Beijing"}
- 指定字段初始化:使用字段名赋值,更清晰且可打乱顺序,推荐使用。
p2 := Person{Name: "Bob", Age: 30, City: "Shanghai"}
- 零值初始化:声明但不赋值,所有字段自动设为对应类型的零值。
var p3 Person // Name="", Age=0, City=""
- 指针初始化:使用 & 返回结构体指针,或使用 new() 函数。
p4 := &Person{Name: "Charlie", Age: 28}
p5 := new(Person)
p5.Name = "David"
方法绑定
Go允许为结构体定义方法,通过接收者(receiver)将函数与结构体关联。接收者可以是值类型或指针类型,影响是否能修改原数据。
- 值接收者方法:接收的是结构体的副本,适合只读操作。
func (p Person) Info() string {
return fmt.Sprintf("%s, %d岁, 居住于%s", p.Name, p.Age, p.City)
}
- 指针接收者方法:接收结构体指针,可修改原数据,常用于更新字段。
func (p *Person) SetAge(age int) {
p.Age = age
}
调用方法时,Go会自动处理值和指针之间的转换。例如,即使 p 是值类型,也能调用 p.SetAge(35)。
基本上就这些。结构体是Go中组织数据的基础,配合方法使用,能有效封装行为与状态,写出清晰、可维护的代码。定义时注意字段可见性,初始化选择合适方式,方法绑定根据是否需要修改状态来决定接收者类型。不复杂但容易忽略细节。










