结构体的匿名字段 匿名字段默认会采用类型名作为字段名 结构体体里的字段是唯一的 不能冲突的 一个结构体中同种类型的匿名字段只能有一个 匿名字段:没有名字的字段 package main
结构体的匿名字段
匿名字段默认会采用类型名作为字段名
结构体体里的字段是唯一的 不能冲突的
一个结构体中同种类型的匿名字段只能有一个
匿名字段:没有名字的字段
package main
import "fmt"
// 匿名字段
// 字段比较少也比较简单的场景
// 不常用!!!
type person struct {
// name string
// age int
string
int
}
func main() {
p1 := person{
"紫霞",
18,
}
fmt.Println(p1)
fmt.Println(p1.string)
fmt.Println(p1.int)
}
嵌套结构体
嵌套匿名字段
嵌套结构体的字段名冲突
匿名嵌套结构体
匿名嵌套结构体的字段冲突
package main
import "fmt"
// 嵌套结构体
type address struct {
province string
city string
}
type workPlace struct {
province string
city string
}
type person struct {
name string
age int
// province string
// city string
// addr address
address // 匿名嵌套结构体
// address:aaddress
workPlace
}
type company struct {
name string
// province string
// city string
addr address
}
func main() {
p1 := person{
name: "李霞",
age: 12,
// addr: address{
address: address{
province: "陕西省",
city: "西安市",
},
}
fmt.Println(p1)
// fmt.Println(p1.name, p1.addr.city)
fmt.Println(p1.name, p1.address.city)
// fmt.Println(p1.city) // 先在自己结构体找这个字段,找不到就去匿名嵌套的结构体中查找该字段
fmt.Println(p1.address.city)
fmt.Println(p1.workPlace.city)
}
结构体的“继承”
package main
import "fmt"
// 结构体模拟实现其他语言中的"继承"
type animal struct {
name string
}
// 给animal实现一个移动的方法
func (a animal) move() {
fmt.Printf("%s会动!\n", a.name)
}
// 狗类
type dog struct {
feet uint8
animal // animal 拥有的方法dog此时也有
}
// 给dog实现一个汪汪汪的方法
func (d dog) wang() {
fmt.Println("汪汪汪~")
fmt.Printf("%s在叫:汪汪汪\n", d.animal.name)
fmt.Printf("%s在叫:汪汪汪\n", d.name)
}
func main() {
d1 := dog{
feet: 4,
animal: animal{name: "小白"},
}
fmt.Println(d1)
d1.wang()
d1.move()
}