zoukankan      html  css  js  c++  java
  • Goroutine的几个例子

      试试下面的几个例子,并反思总结。

    1、

    package main

    import (
    "fmt"
    "runtime"
    )
    func main() {
    names:=[]string{"A","B","C","D"}
    for _,name := range names{
    go func() {
    fmt.Printf("Hello %s ",name)
    }()
               runtime.Gosched()
        }
    }

    2、
    package main

    import (
    "fmt"
    "runtime"
    )
    func main() {
    names:=[]string{"A","B","C","D"}
    for _,name := range names{
    go func() {
    fmt.Printf("Hello %s ",name)
    }()
           }
        runtime.Gosched()
    }

    3、package main
    import (
    "fmt"
    "runtime"
    )
    func main() {
    names:=[]string{"A","B","C","D"}
    for _,name := range names{
    go func(who string) {
    fmt.Printf("Hello %s ",who)
    }(name)
    }
    runtime.Gosched()
    }


      执行的结果,很显然3是正确的,原因在于name变量的类型是一个非引用类型。我们将name传递至方法时,值会被复制。
    而切片是引用类型,改变其值会对函数内部产生影响,所以使用3的形式,达到“分离”的效果。
  • 相关阅读:
    微信小程序中样式问题
    根据后台数据,渲染多个坐标在小程序中
    配置vscode同步大神玺哥的配置
    vue总结
    回文数
    Pytorch的runtime error
    PyTorch图像预处理
    python isinstance()函数
    Java实现weightedUF
    Java Iterator
  • 原文地址:https://www.cnblogs.com/newmys/p/6420145.html
Copyright © 2011-2022 走看看