golang中在遍历数组时,要修改数组中变量无法修改成功的问题

记录在写go时遇到的一个小坑

例子:

package main

import (
	"fmt"
)

type UserInfo struct {
	Name 	string 		`json:"name"`
	UserId 	int 		`json:"user_id"`
}

type Message struct {
	Type string `json:"type"`
	Id	int `json:"id"`
	Permission	[]UserInfo	`json:"permission"`
}

func main(){
	Users := []UserInfo{
		UserInfo{Name:"b", UserId:2},
		UserInfo{Name:"c", UserId:3},
	}

	mdata := &Message{
		Type: "a",
		Id: 1,
		Permission: Users,
	}
	fmt.Println("初始mdata:", mdata)
	
	permissions := mdata.Permission
	for _, p := range permissions {
		p.UserId = 3
	}
	fmt.Println("第一次修改后mdata:", mdata)

	for index := range permissions {
		permissions[index].UserId = 3
	}
	fmt.Println("第二次修改后mdata:", mdata)

}

结果输出:

初始mdata: &{a 1 [{b 2} {c 3}]}
第一次修改后mdata: &{a 1 [{b 2} {c 3}]}
第二次修改后mdata: &{a 1 [{b 3} {c 3}]}

为什么第一次修改不成功呢?

我想大致原因是第一次修改中的p是另一个复制了permissions中变量的变量。然后第一次修改只是对p中值进行了修改,原始的permissions中的值还没有修改。所以以后要修改需要用第二种方法,用index找到原始permission中对应的值进行修改。






  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值