package main
import "fmt"
type Student struct {
name string
}
func main() {
var students [2]Student
students[0].name = "fred"
students[1].name = "karen"
var fredPtr *Student
fredPtr = nil
for _, student := range students {
if student.name == "fred" {
fredPtr = &student
}
}
fmt.Println(fredPtr.name)
}
這段代碼的輸出結(jié)果是:
go run for-loop.go
karen
因?yàn)?fredPtr 在賦值的時候指向的是student變量,當(dāng)?shù)谝淮蔚鷷r帆焕,指向fred,但是當(dāng)?shù)诙蔚鷷r,則會指向karen控轿,這是就會到時結(jié)果和預(yù)期不一致。
圖片表示如下:
第一次迭代.png
第二次迭代.png
正確的寫法
package main
import "fmt"
type Student struct {
name string
}
func main() {
var students [2]Student
students[0].name = "fred"
students[1].name = "karen"
var fredPtr *Student
fredPtr = nil
for idx, student := range students {
if student.name == "fred" {
fredPtr = &students[idx]
}
}
fmt.Println(fredPtr.name)
}
參考原文:Go is Not Python