1:匿名字段
1.1匿名字段创建与初始化
package main
import "fmt"
type person struct {
id int
name string
age int
}
type student struct {
person //匿名字段
score float64
}
func main() {
var a student=student{person{1,"lili",25},98}
fmt.Println(a)
}
输出结果
{{1 lili 25} 98}
初始化方式如下:
1)自动推导类型
2)指定初始化成员
1.2同名字段
package main
import "fmt"
type person struct {
id int
name string
age int
}
type student struct {
person
name string //同名字段
score float64
}
func main() {
var a student=student{person{1,"lili",25},"bob",88}
fmt.Println(a.name)
fmt.Println(a.person.name)
}
//输出结果
//bob
//lili
1.3指针类型匿名字段
package main
import "fmt"
type person struct {
id int
name string
age int
}
type student struct {
*person //匿名字段
score float64
}
func main() {
var a student=student{&person{1,"lili",25},98}
fmt.Println(a)
fmt.Println(a.name,a.id,a.age,a.score)
}
输出结果
{0xc0420023e0 98}
lili 1 25 98
另一种初始化方式
package main
import "fmt"
type person struct {
id int
name string
age int
}
type student struct {
*person //匿名字段
score float64
}
func main() {
var a student
a.person=new(person)
a.id=1
a.name="lili"
a.age=19
a.score=99
fmt.Println(a)
fmt.Println(a.name,a.id,a.age,a.score)
}
//输出结果
//{0xc0420023e0 99}
//lili 1 19 99
此处注意需要用new分配空间,new( )的作用是分配空间,new( )函数的参数是一个类型,这里为Person结构体类型,返回值为指针类型,所以赋值给*Person,这样*Person也就指向了结构体Person的内存