在 Go 语言(Golang)中,结构体(Struct)是一种复合数据类型,它允许你将零个或多个不同类型的命名项组合成一个单一的类型。结构体是一种非常灵活的数据表示方式,常用于表示具有多个属性的复杂对象。
你可以使用 type 关键字和 struct 关键字来声明一个结构体。结构体中的每个项称为字段(Field),字段之间使用分号(;)或换行符来分隔(在 Go 中,通常使用换行符来分隔字段)。
type Person struct {
Name string
Age int
Email string
}
在这个例子中,Person 是一个结构体类型,它有三个字段:Name(字符串类型)、Age(整型)和 Email(字符串类型)。
有几种方法可以初始化结构体变量:
p := Person{
Name: "John Doe",
Age: 30,
Email: "john.doe@example.com",
}
p := Person{"John Doe", 30, "john.doe@example.com"}
但请注意,这种方法依赖于字段的声明顺序,如果将来结构体定义发生变化,这种初始化方式可能会引入错误。
new 关键字(不常用,因为它只分配了内存,并返回了指向零值的指针):p := new(Person)
p.Name = "John Doe"
p.Age = 30
p.Email = "john.doe@example.com"
你可以通过点(.)操作符来访问结构体变量的字段。
fmt.Println(p.Name) // 输出: John Doe
在 Go 中,你经常会看到结构体通过指针来传递和访问。这样做的好处是可以避免在函数之间传递大型结构体时的数据复制开销,并且可以直接修改结构体中的字段。
func modifyPerson(p *Person) {
p.Age = 31
}
func main() {
p := Person{Name: "John Doe", Age: 30, Email: "john.doe@example.com"}
modifyPerson(&p)
fmt.Println(p.Age) // 输出: 31
}
在这个例子中,modifyPerson 函数接收一个指向 Person 结构体的指针作为参数,并修改了结构体中的 Age 字段。由于 p 在 main 函数中是通过 &p(即 p 的地址)传递给 modifyPerson 的,因此 main 函数中的 p 也会看到 Age 字段的修改。
Go 语言允许你在一个结构体中嵌套另一个结构体作为字段。
type Address struct {
City, State string
}
type Person struct {
Name string
Age int
Address Address
}
在这个例子中,Person 结构体包含一个 Address 类型的字段,这允许你将 Address 结构体作为 Person 结构体的一部分来组织和访问数据。
上一篇: Golang 语言指针
下一篇: Golang 语言切片(Slice)