https://www.jb51.net/article/196735.htm
func TestA(t *testing.T) {
//书本价格
idMapPrice := map[int]int{
1: 40,
2: 55,
}
//定义书本
mySlice := []Book{
{Name: "《如何三天追到富婆》", Id: 1},
{Name: "《韭菜的自我修养》", Id: 2},
}
//for循环赋值price字段,结果不生效
for index, book := range mySlice {
book.Price = idMapPrice[book.Id]
fmt.Printf("index value:%p, value:%p \n",&mySlice[index],&book)
}
fmt.Printf("result is : %+v\n", mySlice)
}
type Book struct {
Id int
Name string
Price int
}
=== RUN TestA
index value:0xc0000a6680, value:0xc0000d6040
index value:0xc0000a66a0, value:0xc0000d6040
result is : [{Id:1 Name:《如何三天追到富婆》 Price:0} {Id:2 Name:《韭菜的自我修养》 Price:0}]
--- PASS: TestA (0.00s)
PASS
for-range中的book是临时变量,非真正slice结构体中的book
for-range在多次循环中,book是同一个临时变量。看打印,地址都是0xc0000d6040