golang 语言协程
协程中使用全局变量、局部变量、指针、map、切片等作为参数时需要注意,此变量的值变化问题。 与for 循环,搭配使用更需谨慎。
1、内置函数时直接使用局部变量,未进行参数传递
func main() {
for i := 0;
i < 100;
i++ {
go func() {
fmt.Println(i)
}()
}
}
运行效果
文章图片
func main() {
for i := 0;
i < 100;
i++ {
go func(i int) {
fmt.Println(i)
}(i)
}
}
运行效果
文章图片
2。地址传递的参数
type Per struct {
name string
bhint
}func main() {
p := &Per{}
for i := 0;
i < 100;
i++ {
p.bh = i
go func(p *Per) {
fmt.Println(p)
}(p)
}
}
文章图片
【golang|go 协程使用陷阱】分析: 导致以上非实际结果的原因是,go 之后并非立即启动协程的。
推荐阅读
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现
- Golang 数组和切片
- Go JSON编码与解码()
- golang map基础知识