多年C、C++开发者,刚学GO 二天,目前对着GO语言圣经练习。
https://docs.ruanjiadeng.com/gopl-zh/ch1/ch1-03.html
发现示例程序dup3和dup2的执行结果不一致,
当输入的文件最后一行不是一个换行时。
gopl.io/ch1/dup3
```go
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, "dup3: %v\n", err)
continue
}
for _, line := range strings.Split(string(data), "\n") {
counts[line]++
}
}
for line, n := range counts {
if n > 1 {
fmt.Printf("%d\t%s\n", n, line)
}
}
}
```
经过调试分析,发现将 `strings.Split(string(data), "\n")` 改成 `strings.Split(string(data), "\r\n") `,看来GO标准库没有像C一样,
把WINDOWS平台上的换行"\n"替换成"\r\n"。
更多评论