-2
此代碼:範圍超過串切片不一致
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)
}
產生輸出 「CCC」,而此代碼:
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]」
的第一個建議範圍迭代引用(它不應該),第二個暗示它遍歷值的副本(它應該)。
爲什麼第一個產生輸出「a b c」?
的工作是什麼,第二個點?你打印3次後,你只是打印整個切片。 https://play.golang.org/p/rNEGrgS3AT – mkopriva
https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables –
https://golang.org/ DOC/FAQ#closures_and_goroutines – JimB