go语法:结构体嵌套

参考:

https://zhuanlan.zhihu.com/p/300992397(知乎go结构体)

https://studygolang.com/articles/11313 (go中文网)

匿名结构体和非匿名结构体

上代码:

package main

import "fmt"

type info struct {
    addr string
    name string
}
type info2 struct {
    addr string
    name string
}
type user struct{
    id int32
    info //匿名:未指定字段名
    iii info2 //非匿名:指定字段名为iii
}

func (pInfo *info) printInfo()  {
    fmt.Println(pInfo)
}
func (pInfo *info2) printInfo2()  {
    fmt.Println(pInfo)
}
func (pUser * user) printUser(){
    fmt.Println(pUser)
}

func main(){
    u := user{
        id: 1,
        info:info{
            addr: "aaa",
            name:"babb",
        },
    }

    u.printInfo()//假如是匿名字段,go会进行方法提升,可以直接.出来
    u.printUser()
    u.iii.printInfo2()//假如指定了字段的命名,那调用相关函数就需要指定字段名才能调用了
    return
}

匿名结构体与父级结构体字段同名

上代码

type Info struct {
    sex int
    name string
    age int
    address string
}

type User struct{
    like string
    sex int
    Info
}

user:=User{}
user.sex=1//这里修改的外部结构User里面的sex字段值
user.Info.sex=2//这里修改的是嵌入结构Info的sex字段值
原文地址:https://www.cnblogs.com/tkzc2013/p/15208979.html