这段代码:
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)
}
产生输出“cc 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)
}
产生输出“[abc]”
第一个建议 for range 迭代引用(它不应该),第二个建议它迭代值的副本(它应该)。
为什么第一个不产生输出“ab c”?