17 Golang结构体详解(三)

2021-03-29  本文已影响0人  learninginto
一、结构体嵌套
type User struct {
    username string
    password string 
    sex string
    age int 
    address Address //User结构体嵌套Address结构体
}

type Address struct {
    name string
    phone string
    city string
}

func main() {
    var u User
    u.username = "lxc"
    u.password = "123456"
    u.address.name = "张三"
    u.address.phone = "010-1234567"
    u.address.city = "北京"
    fmt.Printf("%#v",u)
    //main.User{username:"lxc", password:"123456", sex:"", age:0, address:main.Address{name:"张三", phone:"010-1234567", city:"北京"}}
}
type User stuct {
    username string
    password string 
    Address
}

type Address struct {
    name string
    phone string
    city string
}

func main() {
    var u User
    u.city = "上海"
    fmt.Println(u.city)//上海
    fmt.Println(u.Address.city)//上海
}
type User struct {
    username string 
    password string
    addtime string
    Address
}

type Address struct {
    name string
    phone string
    city string
    addtime string
}

type Email struct {
    account string
    addtime string
}

func main () {
    var u User
    u.city = "上海"
    u.addtime = "2021-03-10"
    fmt.Println(u)
    //main.User{username:"", password:"", addtime:"2021-03-10", Address:main.Address{name:"",phone:"", city:"上海", addtime:""}}
    u.Address.addtime = "2021-06-10"
    fmt.Println(u)
}
type User struct {
    username string
    password string
    Address
    Email
}

type Address struct {
    name string 
    phone string
    city string
    addtime string
}

type Email struct {
    account string
    addtime string
}

func main() {
    var u User
    //u.addtime = "2021-06-06"//报错 ambiguous selector u.addtime
    u.Address.addtime = "2021-06-06"
    u.Email.addtime = "2021-06-07"
    fmt.Println(u)
    //main.User{username:"", password:"", Address:main.Address{name:"", phone:"", city:"", addtime:"2021-06-06"}, Email:main.Email{account:"", addtime:"2021-06-07"}}
}
二、结构体的继承

Go语言中,结构体的继承是通过嵌套实现的

每次都从子结构体向父结构体中去找

//父结构体
type Animal struct {
    Name string
}

//子结构体
type Dog struct {
    Age int
    Animal //结构体嵌套
}

func (a Animal) run() {
    fmt.Printf("%v在运动 ", a.Name)
}

func (d Dog) wang() {
    fmt.Printf("%v在汪汪 ", d.Name)
}

func main() {
    var d = Dog {
        Age : 20,
        Animal : Animal{
            Name : "旺财",
        },
    }
    d.run()
    d.wang()
    //旺财在运动 旺财在汪汪 
}
type Animal struct {
    Name string
}

type Dog struct {
    Age int
    *Animal //结构体嵌套
}

func (a Animal) run() {
    fmt.Printf("%v在运动 ", a.Name)
}

func (d Dog) wang() {
    fmt.Printf("%v在汪汪 ", d.Name)
}

func main() {
    var d = Dog {
        Age : 20,
        Animal : &Animal{
            Name : "旺财",
        },
    }
    d.run()
    d.wang()
    //旺财在运动 旺财在汪汪 
}
上一篇下一篇

猜你喜欢

热点阅读