gpt4 book ai didi

go - 如何按所需顺序打印数字

转载 作者:IT王子 更新时间:2023-10-29 01:25:01 26 4
gpt4 key购买 nike

我在互联网上找到了很多关于互斥量的教程,然后在我尝试构建自己的示例之后。看看我的以下代码片段。

package main

import (
"fmt"
"sync"
"time"
)

func main() {

thread := new(sync.Mutex)
y := 0

for i := 0; i < 10; i++ {
go func() {
y = i
thread.Lock()
fmt.Println(y)
thread.Unlock()
}()
}

time.Sleep(100000)

}

作为输出,我只有 10 个,但我的目标是获得 1、2、3、4...10。我怎样才能做到这一点?或者我的示例没有任何意义?

最佳答案

问题是函数闭包绑定(bind)到外部作用域变量i并且 i 在循环中发生变化。当例程执行时(很可能在循环结束后),i 的值为 10。

有两种解决方法,第一种是在每个循环中创建一个新变量:

http://play.golang.org/p/ylTENWeuEl

for i := 0; i < 10; i++ {
y := i
go func() {
thread.Lock()
fmt.Println(y)
thread.Unlock()
}()
}

或者直接将值传递给函数闭包:

http://play.golang.org/p/DKd12-VNSk

for i := 0; i < 10; i++ {
go func(value int) {
thread.Lock()
fmt.Println(value)
thread.Unlock()
}(i)
}

关于go - 如何按所需顺序打印数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629109/

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