欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

go for range坑和闭包坑的分析

程序员文章站 2023-10-30 15:22:58
看程序: package main import ( "fmt" "time" ) func main() { str := []stri...

看程序:

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

想一想,为什么。

不多说。

总结

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