go ``` bytes: document capacity expectations of Split and Fields ```

kyxcudwk  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(152)

Split 函数从原始输入中返回一个子切片的切片。目前,它没有记录任何关于每个子切片容量的期望。
例如,以下代码的行为预期是什么?

lines := bytes.Split([]byte("foo\nbar\n", []byte("\n"))
lines[0] = append(lines[0], "XXXXX"...)
fmt.Println(lines[1]) // does this print "bar" or "XXX"?

当前,它会打印 "bar",因为逻辑 explicitly caps the capacity to the length ,这是我期望的行为。
然而,我们应该记录这种行为是用户可以依赖的。

rsaldnfx

rsaldnfx2#

我们可以将追加行写成

lines[0] = append(lines[0][:len(lines[0]):len(lines[0])], "XXXXX"...)

但这样太冗长了,这可能是人们不喜欢使用三索引切片形式的原因之一。为了减少冗余,有一些建议:

kgqe7b3p

kgqe7b3p3#

/cc @bradfitz@ianlancetaylor

相关问题