strings.Split 添加额外的换行符

strings.Split adds additional newline

使用 ioutil.ReadFile 读取文件后,我尝试使用 strings.Split 和分隔符 "\n" 拆分我的字节“字符串”,但我收到一个额外的换行符(切片的长度是增加 + 1).

为什么这和预期的不一样?

// numbers.txt
1
2
3
4
5
func main() {
    data, _ := ioutil.ReadFile("numbers.txt")

    input := strings.Split(string(data), "\n")

    fmt.Println("Len: ", len(input))

    for i, v := range input {
        fmt.Println(i, v)
    }
}

// Output
Len: 6
0 1
1 2
2 3
3 4
4 5
5

预计:

Len: 5
0 1
1 2
2 3
3 4
4 5

可能是 Read text file into string array (and write)
的副本 见评论

Note strings.Split will append one extra line (an empty string) when parsing regular POSIX text files example – bain Dec 1 '14 at 20:33

strings.Split 不会附加额外的行 - 否则它会在文档中指定。
如果您查看文件如下:

1\n
2\n
3\n
4\n
5\n

您会注意到,如果将字符串按 \n 拆分,则必须有 6 个条目。

1\n2\n3\n4\n5\n<last empty item is here>