Go 语言中的结构体是一种复杂数据类型,用于存储多个字段的值。结构体可以用来表示复杂的数据对象,例如学生、员工、商品等。
结构体声明
结构体可以使用以下语法声明:
type structName struct {
field1 type1
field2 type2
...
}
其中,structName
是结构体的名称,field1
、field2
等是结构体的字段,type1
、type2
等是字段的类型。
例如:
type Person struct {
name string
age int
addr string
}
这将声明一个名为 Person
的结构体,它有三个字段:name
、age
和 addr
。
结构体字段访问
结构体字段可以使用点号(.
)访问。例如:
p := Person{"John", 30, "New York"}
fmt.Println(p.name) // John
fmt.Println(p.age) // 30
fmt.Println(p.addr) // New York
结构体方法
结构体可以定义方法。方法是一个函数,它可以访问结构体的字段和其他方法。例如:
type Person struct {
name string
age int
}
func (p *Person) sayHello() {
fmt.Println("Hello, my name is", p.name)
}
func main() {
p := &Person{"John", 30}
p.sayHello() // Hello, my name is John
}
这将声明一个名为 sayHello
的方法,它可以访问结构体的 name
字段。方法可以使用指针接收者(*Person
),这样方法可以修改结构体的字段。
结构体嵌套
结构体可以嵌套。例如:
type Address struct {
street string
city string
state string
}
type Person struct {
name string
age int
addr *Address
}
func main() {
addr := &Address{"123 Main St", "New York", "NY"}
p := &Person{"John", 30, addr}
fmt.Println(p.addr.street) // 123 Main St
}
这将声明一个名为 Address
的结构体,它有三个字段:street
、city
和 state
。然后声明一个名为 Person
的结构体,它有三个字段:name
、age
和 addr
。addr
字段是一个指向 Address
结构体的指针。
结构体使用
结构体可以用于表示复杂的数据对象。例如:
type Student struct {
name string
age int
grades []int
}
func main() {
s := &Student{"John", 20, []int{90, 80, 70}}
fmt.Println(s.name) // John
fmt.Println(s.age) // 20
fmt.Println(s.grades) // [90 80 70]
}
这将声明一个名为 Student
的结构体,它有三个字段:name
、age
和 grades
。grades
字段是一个 slice,可以存储多个成绩。