Go语言中如何实现结构体的匿名字段、嵌套结构及结构体继承?

2026-05-05 20:481阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计523个文字,预计阅读时间需要3分钟。

Go语言中如何实现结构体的匿名字段、嵌套结构及结构体继承?

结构体的匿名字段+匿名字段默认会采用类型名作为字段名+结构体体内的字段是唯一的+不能重复的+一个结构体中同种类型的匿名字段只能有一个+匿名字段:没有名字的字段

结构体的匿名字段

匿名字段默认会采用类型名作为字段名

Go语言中如何实现结构体的匿名字段、嵌套结构及结构体继承?

结构体体里的字段是唯一的 不能冲突的

一个结构体中同种类型的匿名字段只能有一个

匿名字段:没有名字的字段

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() }

本文共计523个文字,预计阅读时间需要3分钟。

Go语言中如何实现结构体的匿名字段、嵌套结构及结构体继承?

结构体的匿名字段+匿名字段默认会采用类型名作为字段名+结构体体内的字段是唯一的+不能重复的+一个结构体中同种类型的匿名字段只能有一个+匿名字段:没有名字的字段

结构体的匿名字段

匿名字段默认会采用类型名作为字段名

Go语言中如何实现结构体的匿名字段、嵌套结构及结构体继承?

结构体体里的字段是唯一的 不能冲突的

一个结构体中同种类型的匿名字段只能有一个

匿名字段:没有名字的字段

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() }