go 协程使用陷阱

来源:互联网 发布:看美股用什么软件 编辑:程序博客网 时间:2024/06/04 20:11

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    bh   int}func main() {    p := &Per{}    for i := 0; i < 100; i++ {        p.bh = i        go func(p *Per) {            fmt.Println(p)        }(p)    }}

这里写图片描述

分析: 导致以上非实际结果的原因是,go 之后并非立即启动协程的。

0 0
原创粉丝点击