golang 闭包从范围中捕获错误的值

标签 go

下面的测试代码:

func main() {
    lans := [5]string{"java", "python", "erlang", "cpp", "go"}
    fin := make(chan bool)
    for _, l := range(lans) {
        go func() {
            fmt.Println(l)
            }()
    }
     <- fin
}

我认为输出将是:java, python, erlang, cpp, go; 但输出是: 去吧去吧去吧; 这里有什么问题吗?

最佳答案

就这样写函数,把动词l抓到函数中

 go func(l string) {
     fmt.Println(l)
 }(l)

关于golang 闭包从范围中捕获错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275410/

相关文章:

concurrency - Golang 使用 goroutines 并行下载多个文件

go - 我可以使用 Context().Done() 来检查服务器关闭吗?

postgresql - 无法连接到 postgres(用户密码验证失败 - docker)

go - 我正在使用 golang present 工具来构建演示文稿。有没有办法覆盖默认模板?

mongodb - 使用 mgo 检索嵌套文档

python - golang 像 python 一样定义 dict,并将值附加到 dict 中的列表

go - 将 gorm 日志存储在文件中

go - 制作自定义结构类型的常量全局变量

go - slice slice 的拆包

go - 为什么会陷入僵局?