一个刚接触 go 的疑问

我是一枚刚接触 go 的小趴菜, 在接触到 go 的数组与切片时候有一些疑问
go 中数组是固定容量的, 是为了保证内存连续性, 提高效率, 所以推出了切片, 但是切片只能 add, 不能 delete, 如果想delete 还得自己写方法

我的问题是 go 语言这么设计的意图是什么, 为什么不能像其他语言那样直接支持 removeItemWith(index: Int) 这种方法, 而需要自己写, 或者使用三方框架的

或者说有方法使我没看到?:joy: 期望大佬解惑, (ps: 摸鱼:fish:ing…)

1 Like

slice如果要移除某个元素,貌似还真没有好方法,比如移除下标为5的元素,我一般这样写
s = append(s[:5], s[6:]…)

3 Likes

蹲答案,我也计划学习go

我觉得也得这么写

虽然丑陋但是貌似没有更好的写法 :joy:

是的大佬 就是好麻烦, 既然都自动扩容了, 为啥不把增删啥的都实现了呢, 迷惑

看来golang是简陋不是简洁

从设计上说 切片他不真正存储内容 实际存储内容是底层数组
例如数组a[1,2,3,4,5,6]
切片a用了2-4
切片b用了4-6
因此 你认为的删除其实就是创建一个新的切片 因此需要使用s = append(s[:5], s[6:]…)

5 Likes

估计设计的时候懒得写那么多api,就给个append,各种功能append一把梭 :no_mouth:

哦哦哦 惊了, 我倒是从来都没这么想过, 果然每天都能和大佬学到新知识, 每天都能进步

slices.Delete(slice, i, j) 这个api 删除从索引i,j的元素 返回新的切片