欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > go for 循环变量的使用及易错点

go for 循环变量的使用及易错点

2024/10/24 16:24:01 来源:https://blog.csdn.net/yuxuan89814/article/details/141234429  浏览:    关键词:go for 循环变量的使用及易错点

1,for 循环变量,整个for循环中变量i始终使用一个变量,i地址不变,存放的内容在变

func main() {for i := 0; i < 10; i++ {fmt.Printf("值:%v  地址:%v \n", i, &i)}
}

打印:

值:0  地址:0xc00001e068 
值:1  地址:0xc00001e068 
值:2  地址:0xc00001e068 
值:3  地址:0xc00001e068 
值:4  地址:0xc00001e068 
值:5  地址:0xc00001e068 
值:6  地址:0xc00001e068 
值:7  地址:0xc00001e068 
值:8  地址:0xc00001e068 
值:9  地址:0xc00001e068

若是使用变量地址,注意变量的内容一直在变化。如下例子,&i最后指向内容3

	var test_i [](*int)for i := 0; i < 3; i++ {test_i = append(test_i, &i)}for i := 0; i < 3; i++ {fmt.Println(*test_i[i])}

打印

3
3
3

2,for 循环加goroutine的使用,注意goroutine中使用循环变量,会随着for 循环的循环次数变化而变化。

var wg sync.WaitGroupfor i := 0; i < 3; i++ {wg.Add(1)go func() {defer wg.Done()fmt.Println("goroutine 中使用循环变量:", i) // 打印的是循环结束后的 i 值}()}wg.Wait()

 相当于for循环结束才真正运行goroutine。此时i最后的值是3.

gorountine 中使用循环变量: 3
gorountine 中使用循环变量: 3
gorountine 中使用循环变量: 3

想要得到不同变量的使用,可以让循环变量作为参数传递进去

var wg sync.WaitGroupfor i := 0; i < 3; i++ {wg.Add(1)go func(t int) {defer wg.Done()fmt.Println("gorountine 中使用循环变量:", t) // 打印的是循环结束后的 i 值}(i)}wg.Wait()

gorountine 中使用循环变量: 0
gorountine 中使用循环变量: 2
gorountine 中使用循环变量: 1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com