相关疑难解决方法(0)

是否正在结束一个惯用的切片?

我正在阅读Go的compress/flate包,我发现了这段奇怪的代码[1]:

n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
Run Code Online (Sandbox Code Playgroud)

在上下文中,list保证指向具有更多数据的数组.这是一个私有函数,因此不能在库外滥用.

对我来说,这似乎是一个可怕的黑客应该是运行时异常.例如,以下D代码生成RangeError:

auto x = [1, 2, 3];
auto y = x[0 .. 2];
y = y[0 .. 3];
Run Code Online (Sandbox Code Playgroud)

使用以下内容可以更简单地(并且看起来更安全)进行滥用切片:

x := []int{1, 2, 3}
y = x[:2]
y = append(y, 4) // x is now [1, 2, 4] because of how append works
Run Code Online (Sandbox Code Playgroud)

但是这两种解决方案看起来都非常骇人和可怕,恕我直言,不应该像他们那样工作.这种事情被认为是惯用的Go代码吗?如果是这样,上面哪一个更惯用?

[1] - http://golang.org/src/pkg/compress/flate/huffman_code.go#L136

idioms go slice

2
推荐指数
1
解决办法
164
查看次数

标签 统计

go ×1

idioms ×1

slice ×1