【发布时间】:2013-07-06 06:18:29
【问题描述】:
我正在阅读 Go 的 compress/flate 包,我发现了这段奇怪的代码 [1]:
n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
在上下文中,list 保证指向一个包含更多数据的数组。这是一个私有函数,所以不能在库外滥用。
对我来说,这似乎是一个可怕的 hack,应该是运行时异常。例如,下面的 D 代码生成 RangeError:
auto x = [1, 2, 3];
auto y = x[0 .. 2];
y = y[0 .. 3];
可以通过以下方式更简单地(并且看起来更安全)滥用切片:
x := []int{1, 2, 3}
y = x[:2]
y = append(y, 4) // x is now [1, 2, 4] because of how append works
但这两种解决方案看起来都非常老套和可怕,恕我直言,它们不应该像它们那样工作。这种事情被认为是惯用的 Go 代码吗?如果是这样,以上哪个是更多惯用的?
[1] - http://golang.org/src/pkg/compress/flate/huffman_code.go#L136
【问题讨论】: