作者:沉稳之固_300 | 来源:互联网 | 2022-12-06 20:12
考虑这样的文本文件:
Some text
here.
---
More text
another line.
---
Third part of text.
我想把它分成三部分,除以---
分隔符.零件应存储在地图中.
现在,完全相同的程序具有不同的类型.
当我使用时string
,一切正常:
KEY: 0
Some text
here.
KEY: 1
More text
another line.
KEY: 2
Third part of text.
https://play.golang.org/p/IcGdoUNcTEe
当我使用时[]byte
,事情变得混乱:
KEY: 0
Third part of teKEY: 1
Third part of text.
ne.
KEY: 2
Third part of text.
https://play.golang.org/p/jqLhCrqsvOs
为什么?
计划1(string
):
func main() {
parts := parseParts([]byte(input))
for k, v := range parts {
fmt.Printf("KEY: %d\n%s", k, v)
}
}
func parseParts(input []byte) map[int]string {
parts := map[int]string{}
s := bufio.NewScanner(bytes.NewReader(input))
buf := bytes.Buffer{}
i := 0
for s.Scan() {
if s.Text() == "---" {
parts[i] = buf.String()
buf.Reset()
i++
continue
}
buf.Write(s.Bytes())
buf.WriteString("\n")
}
parts[i] = buf.String()
return parts
}
计划2([]byte
):
func main() {
parts := parseParts([]byte(input))
for k, v := range parts {
fmt.Printf("KEY: %d\n%s", k, v)
}
}
func parseParts(input []byte) map[int]string {
parts := map[int]string{}
s := bufio.NewScanner(bytes.NewReader(input))
buf := bytes.Buffer{}
i := 0
for s.Scan() {
if s.Text() == "---" {
parts[i] = buf.String()
buf.Reset()
i++
continue
}
buf.Write(s.Bytes())
buf.WriteString("\n")
}
parts[i] = buf.String()
return parts
}
Darshan Rivk..
5
在字符串版本中,
parts[i] = buf.String()
parts[i]
每次都设置为一个新字符串.在[]byte
版本中,
parts[i] = buf.Bytes()
设置parts[i]
为每次由同一数组支持的字节切片.对于所有三个切片,支持数组的内容是相同的,但是长度与创建时的长度相匹配,这就是为什么所有三个切片显示相同内容但在不同位置切断的原因.
您可以替换字节切片线
parts[i] = buf.Bytes()
用这样的东西:
bb := buf.Bytes()
b := make([]byte, len(bb))
copy(b, bb)
parts[i] = b
为了使行为与字符串版本匹配.但是字符串版本更容易,更好地匹配您似乎想要做的事情.
1> Darshan Rivk..:
在字符串版本中,
parts[i] = buf.String()
parts[i]
每次都设置为一个新字符串.在[]byte
版本中,
parts[i] = buf.Bytes()
设置parts[i]
为每次由同一数组支持的字节切片.对于所有三个切片,支持数组的内容是相同的,但是长度与创建时的长度相匹配,这就是为什么所有三个切片显示相同内容但在不同位置切断的原因.
您可以替换字节切片线
parts[i] = buf.Bytes()
用这样的东西:
bb := buf.Bytes()
b := make([]byte, len(bb))
copy(b, bb)
parts[i] = b
为了使行为与字符串版本匹配.但是字符串版本更容易,更好地匹配您似乎想要做的事情.