GO语言基础教程16——结构体-结构体嵌套

简介: 一个结构体中可以嵌套包含另一个结构体或结构体指针。

GO语言基础教程16——结构体-结构体嵌套


GO语言基础教程16——结构体-结构体嵌套


一个结构体中可以嵌套包含另一个结构体或结构体指针。

type China struct {
  provinces string
  City     Citys
}
type Citys struct {
  City1 string
        City2 string
        City3 string
}
func main() {
  p := China{
    provinces : "福建",
                City : City{
                    City1 : "福州",
                    City2 : "厦门",
                    City3 : "泉州",
                },
  }
  fmt.Println(p)
}

嵌套匿名字段

type China struct {
  provinces string
  Citys    //匿名字段
}
type Citys struct {
  City1 string
        City2 string
        City3 string
}
func main() {
        var p China
        p.provinces = "福建"
        p.Citys.City1 = "福州"  //匿名字段默认使用类型名作为字段名
        p.City2 = "厦门  //匿名字段可以省略
  fmt.Println(p)
}

当访问结构体成员时会先在结构体中查找该字段,找不到再去嵌套的匿名字段中查找。


嵌套结构体的字段名冲突


嵌套结构体内部可能存在相同的字段名。在这种情况下为了避免歧义需要通过指定具体的内嵌结构体字段名。

//Address 地址结构体
type Address struct {
  Province   string
  City       string
  CreateTime string
}
//Email 邮箱结构体
type Email struct {
  Account    string
  CreateTime string
}
//User 用户结构体
type User struct {
  Name   string
  Gender string
  Address
  Email
}
func main() {
  var user User
  user.name = "likuis"
  user.Gender = "男"
  user.Address.CreateTime = "2000" //指定Address结构体中的CreateTime
  user.Email.CreateTime = "2000"   //指定Email结构体中的CreateTime
}


结构体的“继承”


Go语言中使用结构体也可以实现其他编程语言中面向对象的继承。

type Animal struct {
  name string
}
func (a *Animal) move() {
  fmt.Printf("%s在吃饭!\n", a.name)
}
type Dog struct {
  Feet    int
  *Animal //通过嵌套匿名结构体实现继承
}
func (d *Dog) wang() {
  fmt.Printf("%s不会吃饭!\n", d.name)
}
func main() {
  d := &Dog{
    Feet: 4,
    Animal: &Animal{ 
      name: "狗蛋",
    },
  }
  d.wang() //狗蛋会汪汪汪~
  d.move() //狗蛋会动!
}


相关文章
|
3天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
13 2
|
4天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
4天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
14 3
|
4天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
14 3
|
5天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
18 3
|
3月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
JSON 编译器 Go
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
198 0
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
|
16天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
35 2
|
Go C语言
Golang结构体和指针
Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念,并解决了C语言的一些坑。
1512 0
|
14天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
25 2