golang中for循环设置对原slice不生效问题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值