私は Go のパッケージを読んでいてcompress/flate
、この奇妙なコードを見つけました [1]:
n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
コンテキストでlist
は、より多くのデータが後にある配列を指していることが保証されています。これはプライベート関数であるため、ライブラリの外で悪用することはできません。
私には、これはランタイム例外であるはずの恐ろしいハックのように思えます。たとえば、次の 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