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)
}
這段代碼的輸出結果是:
go run for-loop.go
karen
因為 fredPtr 在賦值的時候指向的是student變量,當第一次迭代時,指向fred,但是當第二次迭代時,則會指向karen,這是就會到時結果和預期不一致。
圖片表示如下:
第一次迭代.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