引言
结构体是 Go 语言中用于组合不同类型字段的复合数据类型。通过结构体,你可以定义具有相关属性的对象,从而更好地组织和管理数据。
1. 结构体定义
- 定义结构体:
- 使用 struct 关键字来定义结构体类型。
- 示例:
type Person struct {
Name string
Age int
}- 匿名字段:
- 结构体可以包含没有名字的字段,默认使用类型名作为字段名,同一个结构体内的类型名不可重复。
- 示例:
type Circle struct {
string
float64
}- 嵌入字段:
- 结构体可以嵌入其他结构体作为其字段。
- 示例:
type Address struct {
Street string
City string
}
type Employee struct {
Person
Address
}2. 结构体实例化
- 初始化结构体:
- 使用字面量语法来初始化结构体。
- 示例:
p := Person{Name: "Alice", Age: 30}- 构造函数:
- 可以定义构造函数来创建结构体实例。
- 示例:
func NewPerson(name string, age int) Person {
return Person{Name: name, Age: age}
}3. 访问结构体字段
- 字段访问:
- 结构体字段可以通过点运算符来访问。
- 示例:
fmt.Println(p.Name) // 输出 "Alice"- 匿名字段访问:
- 匿名字段也可以通过点运算符来访问。
- 示例:
c := Circle{float64: 5.0}
c.string = "Hello world!"
fmt.Println(c.string, c.float64) // 输出:Hello world! 5- 嵌入字段访问:
- 嵌入字段可以像普通字段一样访问。
- 示例:
emp := Employee{
Person: Person{Name: "Bob", Age: 25},
Address: Address{
Street: "123 Main St",
City: "New York",
},
}
fmt.Println(emp.Address.City) // 输出 "New York"4. 方法绑定
- 方法绑定:
- 为结构体定义方法。
- 示例:
func (p Person) SayHello() string {
return "Hello, my name is " + p.Name
}- 为结构体指针定义方法。
- 示例:
func (p *Person) GetAge() int {
return p.Age
}- 方法调用:
- 结构体实例可以调用其方法。
- 示例:
fmt.Println(p.SayHello()) // 输出 "Hello, my name is Alice"5. 示例代码
package main
import (
"fmt"
)
type Person struct {
Name string
Age int
}
func (p Person) SayHello() string {
return "Hello, my name is " + p.Name
}
func (p *Person) GetAge() int {
return p.Age
}
func NewPerson(name string, age int) Person {
return Person{Name: name, Age: age}
}
func main() {
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Name) // 输出 "Alice"
fmt.Println(p.SayHello()) // 输出 "Hello, my name is Alice"
fmt.Println(p.GetAge()) // 输出30
p2 := NewPerson("Bob", 25)
fmt.Println(p2.Name) // 输出 "Bob"
} 