gpt4 book ai didi

go - 为什么在我的代码中 goroutine 似乎自动卡住循环变量

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:14 24 4
gpt4 key购买 nike

import (
"fmt"
)


func Print(i int) {
fmt.Println(i)
}

func PrintR(i *int) {
fmt.Println(*i)
}


func main() {
for i := 0; i < 10; i++ {
go Print(i) // Get: 1 9 2 3 4 5 7 6 8 0

//go func() {
// Print(i)
//}() // Get: 10 10 7 10 4 10 7 10 10 10 10

//go PrintR(&i) // Get: 7 10 10 7 10 7 10 10 10 10
}
select {

}
}

第二个、第三个例子得到了预期的输出,但我认为第一个例子的输出 go Print(i) 应该与第二个相似,因为它们都没有使用新变量卡住 i 的当前值。造成差异的原因是什么?

最佳答案

Go 按值传递参数。您的第一个示例实际上创建了一个新变量并将当前索引复制到其中,然后再启动新的 goroutine,这与您的第三个示例相同。

关于go - 为什么在我的代码中 goroutine 似乎自动卡住循环变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com