0
我試圖從多諾萬書上運行gopl.io/ch1 /dup3程序在Windows 7上使用版本1.7.3。split包含EOF?
當我運行下面的程序test.go時,我在最後得到一個空行。這是EOF嗎?我如何區分它與實際的空行?
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
Counts := make(map[string]int)
for _, filename := range os.Args[1:] {
data, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", os.Args[0], err)
continue
}
for _, line := range strings.Split(string(data), "\r\n") {
counts[line]++
}
}
for line, n := range counts {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
}
與TEST.DAT文件:
Line number one
Line number two
命令:
> test.exe test.dat test.dat
輸出是
2 Line number one
2 Line number two
2 <-- Here is the empty line.
文件完全一樣顯示在問題恰好與2號線,在沒有額外的行底部,就像你的eofSlice字符串一樣。 – user2443447
@ user2443447檢查完'err'後,做了'fmt.Fprintln(os.Stderr,data [len(data)-1])'print'10'?如果是這樣,那麼你有一組字節像'extraSlice',而不是'eofSlice'。 –
如果你願意,你可以[看另一個遊樂場的例子](https://play.golang.org/p/xCv0XN6gv4)。它使用與你的問題幾乎相同的代碼,除了文件被替換爲字符串。 –