我使用二维字节切片来表示一堆行,但是当我附加到其中一行时,我得到了一些非常奇怪的行为。
这是一个例子:
package main
import (
"bytes"
"fmt"
)
func main() {
str := []byte("first line\nsecond line\nthird line")
values := bytes.Split(str, []byte("\n"))
fmt.Println("Before:")
fmt.Println(string(values[0]))
fmt.Println(string(values[1]))
fmt.Println(string(values[2]))
fmt.Println()
values[0] = append(values[0], []byte("-inserted text-")...)
fmt.Println("After:")
fmt.Println(string(values[0]))
fmt.Println(string(values[1]))
fmt.Println(string(values[2]))
}
我希望这个程序的输出是
Before:
first line
second line
third line
After:
first line-inserted text-
second line
third line
但相反的输出是:
Before:
first line
second line
third line
After:
first line-inserted text-
inserted te
t-ird line
https://play.golang.org/p/iNw6s1S66U
为什么会发生这种情况,我该如何解决?
有趣的是,如果我不使用 split 而是定义如下值,则不会发生这种情况:
values := [][]byte{[]byte("first line"), []byte("second line"), []byte("third line")}
https://play.golang.org/p/pEflrhKLd4
SMILET
慕斯709654
相关分类