c++ string 赋值文本内容_Go 赋值 = 想到的。

本来想着=赋值是否把右值得数据赋予左值,int,float这些肯定是这样的。但是在map,slice用=进行赋值的时候却遇见了一些问题。比如赋予左值之后,修改左值会影响原来的值等等。后来查一些资料,得出一个结论。int,float等基础类型的赋值与C/C++里差别不大,而map,slice等的赋值可以类比指针。当然差别还是有的,自己感受一下就好了

有几个文章可以看看

1.搜索关键字(Go值类型与引用类型)

GO值类型与引用类型 - 我是一条最咸的咸鱼 - 博客园​www.cnblogs.com
9af870382b1b0cfd6390cc430136de83.png

也就是说slice的赋值是把整个结构赋予左值,但是结构里的指针还是指向同样的底层数组。这样感受起来其实还是同一东西,与int等的感受不一样了。

2.slice的一个详细分析。

Go基础系列:Go slice详解​www.cnblogs.com
d467d7ced77c0a106b164bbf58e08bad.png

这里有个内建函数,copy可以用来进行深拷贝。不会失败,是按两个的最小length来拷的。

len(slice)求的是length

cap(slice)求的是capcity

//SLICE[A:B]
//SLICE[A:B:C]
//其中A表示从SLICE的第几个元素开始切,B控制切片的长度(B-A),C控制切片的容量(C-A),如果没有给定C,则表示切到底层数组的最尾部
//SLICE[A:]  // 从A切到最尾部
//SLICE[:B]  // 从最开头切到B(不包含B)
//SLICE[:]   // 从头切到尾,等价于复制整个SLICE

3.map的真正深度拷贝

func (p *Reporter) cloneTags(tags map[string]string) map[string]string {
   cloneTags := make(map[string]string)
   for k, v := range tags {
      cloneTags[k] = v
   }
   return cloneTags
}

假如直接=的话,应该是只复制了表层,底层的指针还是指向原来的。假如有修改的话会导致混乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值