go |struct embedding、generics、goroutine

本文介绍了Go语言中结构体内嵌的特性,展示了如何通过嵌入实现方法的提升,并结合范型讲解了map和切片的使用,以及并发编程中的WaitGroup和goroutine的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值