【发布时间】:2020-10-02 23:45:15
【问题描述】:
package main
import (
"fmt"
)
type test struct {
Name string
}
func main() {
foo := []test{
{Name: "a"},
{Name: "b"},
}
var bar []*test
for _, item := range foo {
fmt.Printf("%v\n", item.Name)
bar = append(bar, &item)
}
for _, item := range bar {
fmt.Printf("%v\n", item.Name)
}
}
当我运行上面的代码时,我希望看到输出
a
b
a
b
但是,输出是
a
b
b
b
发生了什么事?
作为参考,这是在 go playground 中完成的
【问题讨论】:
-
循环重复使用相同的指针。将
fmt.Printf("%p\n", &item)添加到循环中即可查看。
标签: go