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 ,这是我期望的行为。
然而,我们应该记录这种行为是用户可以依赖的。
3条答案
按热度按时间6ju8rftf1#
类似于 #43341
rsaldnfx2#
我们可以将追加行写成
但这样太冗长了,这可能是人们不喜欢使用三索引切片形式的原因之一。为了减少冗余,有一些建议:
append(string(lines[0]), "XXXXX"...)
append(lines[0][::], "XXXXX"...)
kgqe7b3p3#
/cc @bradfitz@ianlancetaylor