用户登录
用户注册

分享至

go for range坑和闭包坑的分析

  • 作者: 梅Ren杏
  • 来源: 51数据库
  • 2021-08-16

看程序:

package main
import (
  "fmt"
  "time"
)
func main() {
  str := []string{"i","like","golang"}
  for _, v := range str{
   v += "good"
  }
  for k, v := range str{
   fmt.println(k, v)
  }
  time.sleep(1e9)
}

结果:

0 i
1 like
2 golang

想一想,为什么。

再看:

package main
import (
  "fmt"
  "time"
)
func main() {
  str := []string{"i","like","golang"}
  for k, v := range str{
   fmt.println(&k, &v)
  }
  time.sleep(1e9)
}

结果:

0xc000012050 0xc00000e1e0
0xc000012050 0xc00000e1e0
0xc000012050 0xc00000e1e0

想一想,为什么。

再看:

package main
import (
  "fmt"
  "time"
)
func main() {
  str := []string{"i","like","golang"}
  for k, v := range str{
   str = append(str, "good")
   fmt.println(k, v)
  }
  time.sleep(1e9)
}

结果:

0 i
1 like
2 golang

想一想, 为什么。

再看:

package main
import (
  "fmt"
  "time"
)
func main() {
  str := []string{"i","like","golang"}
  for k, v := range str{
   go func(i int, s string){
    fmt.println(i, s, k, v)
   }(k, v)
  }
  time.sleep(1e9)
}

结果:

0 i 2 golang
1 like 2 golang
2 golang 2 golang

想一想,为什么。

最后再看:

package main
import (
  "fmt"
  "time"
)
func main() {
  str := []string{"i","like","golang"}
  for k, v := range str{
   go func(i int, s string){
    fmt.println(i, s, k, v)
   }(k, v)
   time.sleep(1e9)
  }
  time.sleep(5e9)
}

结果:

0 i 0 i
1 like 1 like
2 golang 2 golang

想一想,为什么。

不多说。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

软件
前端设计
程序设计
Java相关