【Golang】结构体详解
在Go语言中,结构体是用户定义的类型,它将多种数据类型结合在一起,形成一个新的自定义数据类型。
- 定义结构体
定义结构体的基本语法如下:
type identifier struct {
field1 type1
field2 type2
...
}
例如,定义一个名为"Person"的结构体:
type Person struct {
name string
age int
}
- 创建结构体实例
创建结构体实例有两种方式:
- 直接初始化
- 使用new关键字
例如,创建一个Person的实例:
// 直接初始化
p := Person{
name: "Tom",
age: 30,
}
// 使用new关键字
p := new(Person)
p.name = "Tom"
p.age = 30
- 访问结构体成员
可以使用"."操作符访问结构体成员:
fmt.Println(p.name)
fmt.Println(p.age)
- 结构体方法
可以给结构体添加方法,添加的方法必须是指向结构体的指针类型:
func (p *Person) Speak() {
fmt.Printf("My name is %s, I am %d years old.\n", p.name, p.age)
}
然后通过创建的结构体实例调用这个方法:
p := Person{
name: "Tom",
age: 30,
}
p.Speak() // My name is Tom, I am 30 years old.
- 匿名字段
Go语言中的结构体允许一个字段拥有多个名称,这就是匿名字段。
例如,定义一个名为"Employee"的结构体,它包含一个匿名字段和两个具名字段:
type Employee struct {
name string
age int
Person
}
创建"Employee"的实例并初始化:
e := Employee{
name: "John",
age: 25,
Person: Person{
name: "Tom",
age: 30,
},
}
访问匿名字段的字段:
fmt.Println(e.name)
fmt.Println(e.age)
fmt.Println(e.Person.name)
fmt.Println(e.Person.age)
- 嵌入结构体
可以将一个结构体嵌入另一个结构体中,这样做可以复用代码,减少重复。
例如,将"Person"结构体嵌入到"Employee"结构体中:
type Employee struct {
name string
age int
Person
}
然后创建"Employee"的实例并初始化:
e := Employee{
name: "John",
age: 25,
Person: Person{
name: "Tom",
age: 30,
},
}
访问嵌入的结构体字段:
fmt.Println(e.name)
fmt.Println(e.age)
fmt.Println(e.Person.name)
fmt.Println(e.Person.age)
- 结构体标签
在定义结构体时,可以为每个字段添加标签,这些标签可以在使用反射、JSON序列化/反序列化等场景中使用。
例如,定义一个名为"Book"的结构体,并为每个字段添
评论已关闭