【发布时间】:2018-02-07 01:39:17
【问题描述】:
这段代码:
import "fmt"
import "time"
func main() {
string_slice:=[]string{"a","b","c"}
for _,s:=range string_slice{
go func(){
time.Sleep(1*time.Second)
fmt.Println(s)
}()
}
time.Sleep(3*time.Second)
}
产生输出“c c c”,而这段代码:
import "fmt"
func main() {
string_slice:=[]string{"a","b","c"}
for _,s:=range string_slice{
s="asd"
fmt.Println(s)
}
fmt.Println(string_slice)
}
产生输出“[a b c]”
第一个建议 for range 迭代引用(它不应该),第二个建议它迭代值的副本(它应该)。
为什么第一个不产生输出“a b c”?
【问题讨论】:
-
第二个有什么意义?在打印
"asd"3 次后,您只是在打印整个切片。 play.golang.org/p/rNEGrgS3AT
标签: for-loop go closures goroutine for-range