Go 语言结构
在 Go 语言(也称为 Golang)中,结构体(struct)是一个聚合数据类型,用于将不同类型的字段组合在一起。这种特性使得 Go 结构体类似于其他编程语言中的“类”,但 Go 并没有明确的类和继承机制。以下是关于 Go 结构体的一些基本概念和用法:
定义结构体
type Person struct {
Name string
Age int
}
在这个例子中,Person
是结构体的名称,包含两个字段:Name
和 Age
。
创建和初始化结构体
创建结构体实例有多种方式:
// 使用字段名初始化
person1 := Person{
Name: "Alice",
Age: 30,
}
// 逐位置初始化
person2 := Person{"Bob", 25}
// 使用 new() 函数
person3 := new(Person)
person3.Name = "Charlie"
person3.Age = 20
访问和修改字段
可以通过 .
操作符访问结构体的字段:
fmt.Println(person1.Name) // 输出: Alice
person1.Age = 31 // 修改字段值
结构体的嵌套
结构体可以嵌套其它结构体:
type Address struct {
City, State string
}
type Person struct {
Name string
Age int
Address Address
}
可以直接通过嵌套字段访问:
person := Person{
Name: "Dave",
Age: 40,
Address: Address{
City: "Los Angeles",
State: "California",
},
}
fmt.Println(person.Address.City) // 输出: Los Angeles
匿名字段
Go 语言允许在结构体中使用匿名字段,通常用于简化嵌套结构体的访问:
type Person struct {
Name string
Age int
Address
}
person := Person{
Name: "Eve",
Age: 35,
Address: Address{
City: "Seattle",
State: "Washington",
},
}
fmt.Println(person.City) // 可以直接访问嵌套结构体字段
方法关联
虽然 Go 没有类的概念,但你可以为结构体定义方法:
func (p *Person) Greet() {
fmt.Printf("Hello, my name is %s.\n", p.Name)
}
可以通过结构体实例调用方法:
person.Greet() // 输出: Hello, my name is Eve.
结构体是 Go 语言中强大的特性之一,它提供了灵活的数据组织和方法定义的能力,是构建复杂数据结构和实现接口的重要组成部分。