- 23
- 0
自定义类型方法如下
type cInt []int
func (c cInt) appendV(v int) {
c = append(c,v)
}
func (c *cInt) appendP(v int) {
*c = append(*c,v)
}
测试使用数据
c := cInt{2,3}
c.appendV(4)
c.appendV(5)
c.appendV(6)
fmt.Printf("after appendV :%v \n",c)
c.appendP(9)
c.appendP(10)
c.appendP(11)
fmt.Printf("after appendP :%v \n",c)
测试结果如下
-----------------------------
after appendV :[2 3]
after appendP :[2 3 9 10 11]
自己理解的产生原因:
把实参传递给 类型T : 相当于把Slice指向的底层数组的首地址传给虚参
所以在方法内执行c = append(c, v)的时候 分配新的空间,复制c的内容到这个空间中,再添加v,最会把这个新的slice 地址赋值给 c, 而c是局部的变量,出了这个函数之后要被回收,随机这个新的slice 也就被回收,所以append的时候不能添加.
把实参传递给 类型*T : 相当于把指向Slice的变量的地址传给虚参
所以在方法内执行c = append(c, v)的时候 分配新的空间,复制c的内容到这个空间中,再添加v,最会把这个新的slice 地址赋值给 c, 相当于把外部变量的指向这个新的Slice
另一个和Slice,Array 相关的内容
type cInt []int
func (c cInt) zeroValue() {
for i := range c {
c[i] = 0
}
}
func main() {
fmt.Printf("-------------------\n")
v := cInt{1,2,3,4,5,6}
fmt.Printf("v:%v \n",v)
v.zeroValue()
fmt.Printf("v:%v \n",v)
fmt.Printf("-------------------\n")
}
结果为:
-------------------
v:[1 2 3 4 5 6]
v:[0 0 0 0 0 0]
-------------------
Other
- 上面仅仅是自己的理解,可能存在偏差或者理解错误,望请指正.
- 如果你有发现有更多的坑 可以在下面给出,相互学习,感谢在先.
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

