相关代码
//一些Array声名
//m := [...]int{7:7}[3:]
//m := [3]int{}[3:]
//m := [14]int{4}[3:0]
//m := [14]int{17:1} error array:beyond index
//right way for dec slice
//m := []int{4:5}
m := [...]int{7:7}[3:]
执行上面的代码会产生错误:invalid operation [8]int literal[3:] (slice of unaddressable value),从其他语言来理解这个由点曲折... 你有更好的不能书写的 建议吗?
m := [...]int{7: 7}[3:]
[3:]
这种操作只能作用在变量上, 即已经存在内存地址的数据上, 而[...]int{7: 7}
在赋值给变量前本身地址是不确定的,需要提前赋值给变量,之后才可以使用[3:]
这样的操作。其次这种骚操作看不到任何有意义的地方, 还会造成内存浪费,
[...]int{7: 7}
相创建8个长度的数组,而[3:]
截取之后前三个元素你就没有办法再操作,严重浪费内存,导致内存泄漏。这种写法不符合
Go
的设计, 不仅会造成内存泄漏还会导致代码不易维护和阅读.如果
[...]int{7:7}[3:]
语法正确, 那么下面拆分的代码结果会是[...]int{7:7}[3:]
的预期结果。但是有个更简单的创建
slice
的方法,它是简洁的,且不会造成内存泄漏,m = []int{4: 7}
,其结果和上述代码完全一致。Go不需要很多语法糖,建议阅读 go最佳实践