go slice 参数传递过去 修改之后 外部变量也会被修改的问题详解

go语言中 slice当作参数传递的时候 会将slice本身指针的值copy一份传递过去,但是由于slice本身指针的值也是一个指针,所以当原地修改这个slice本身的值的时候会发生外部的值一起被改的情况。
示例

func SliceTest(str []string) {
   for k,v :=range str{
      str[k] =1 //外部slice会发生改变
      str = append(str,1) //外部slice不会发生改变 因为这个str的本身指针非原来的指针
   }
   fmt.Printf("%p\r\n",&str)
   fmt.Printf("%p\r\n",str)

}
func main() {
   list := make([]string, 30)
   // 待处理的字符串列表
   list = []string{
      "go scanner",
      "go parser",
      "go compiler",
      "go printer",
      "go formater",
   }
   fmt.Printf("%p\r\n",&list)
   fmt.Printf("%p\r\n",list)
   SliceTest(list)
}
//打印结果
//0xc000048420
//0xc000088000
//0xc000048480
//0xc000088000
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值