go 的结构内嵌
注意点,有点像js
func main() {
fmt.Println("hello zhangbuda...")
// 这个内嵌 和 js 有点像
co := container{
base: base{
num: 22,
},
str: "zhangdbau hahahahah ",
}
fmt.Println("co: ", co)
/*
在 Go 语言中,如果一个类型嵌入了另一个类型,那么嵌入类型的方法就会被自动提升到外部类型,这就意味着你可以直接在外部类型上调用嵌入类型的方法。
假设 co 是一个结构体,它嵌入了 base 类型,而 base 类型有一个 describe 方法。那么你可以直接在 co 上调用 describe 方法,就像这样:co.describe()。这个调用会自动转发到 base.describe 方法。
所以,co.describe() 和 co.base.describe() 的结果是一致的,因为它们实际上调用的是同一个方法。
但是,如果 co 自己也定义了一个 describe 方法,那么 co.describe() 就会调用 co 的 describe 方法,而不是 base.describe 方法。这是因为 Go 语言会优先调用最近的方法,而不是最匹配的方法。
*/
fmt.Println("co.describe: ", co.describe())
fmt.Println("co.base.describe: ", co.base.describe())
fmt.Println("co.base.num", co.base.num)
fmt.Println("co.str: ", co.str)
}
type base struct {
num int
}
func (b base) describe() string {
// %v 格式化字符串
// %v 会根据值的类型输出对应的值
return fmt.Sprintf("base with num=%v", b.num)
}
type container struct {
base
str string
}
co: {
{
22} zhangdbau hahahahah }
co.describe: base with