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()
}
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16339346.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话