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

Original: https://www.cnblogs.com/QiaoPengjun/p/16339346.html
Author: QIAOPENGJUN
Title: Go语言学习——结构体的匿名字段、嵌套结构体、结构体的“继承”

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/596782/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球