本文永久链接– https://tonybai.com/2022/10/27/when-encountering-slice-during-function-design切片(slice)是Go语言中的一种重要的也是最常用的同构数据类型。在Go语言编码过程中,我们多数情况下会使用slice替代数组,一来是因为其动态可扩展,二来在多数场合传递slice的开销要比传递数组要小(这里有一些例外)。切片算是“半个”零值可用的类型,为什么这么说呢?当我们声明一个切片类型实例但在未显式初始化的情况下,我们不能直接对其做下标操作,比如:var sl []int
sl[0] = 5 // 错误:引发panic但是我们可以通过Go内置的append函数对其进行追加操作,即便sl目前的值为nil:var sl []int
sl = append(sl, 5) // ok到这里,我要提出本文要讨论的topic了:为什么append函数要通过返回值返回切片结果呢?再泛化一点:当你在函数设计环节遇到要传入传出切片类型时,你会如何设计函数的参数与返回值呢?下面我们就来探讨一下。我们在$GOROOT/src/builtin/builtin.go中找到了append预置函数的原型:func append(slice []Type, elems ...Type) []Type显然参照“append”函数
...
继续阅读
(93)