// vim: set noexpandtab tabstop=2:
package main
import (
"io"
"os"
"log"
"fmt"
)
func main() {
buf := make([]byte, 4)
for {
n, err := io.ReadFull(os.Stdin, buf)
fmt.Printf("== %d\n", n)
if err == io.EOF {
os.Stdout.Write(buf)
os.Stdout.Write([]byte("\n"))
break
} else if err == nil {
os.Stdout.Write(buf)
os.Stdout.Write([]byte("\n"))
} else {
log.Fatal(err)
}
}
}
我正在尝试上面的代码。我不确定为什么最后一个io.ReadFull()以log.Fatal(err)分支结束。我认为它应该读取err == io.EOF分支。谁能让我知道谁在文件末尾读取固定数量的字节?谢谢。
$ builtin printf %s {a..z} | go run main.go
== 4
abcd
== 4
efgh
== 4
ijkl
== 4
mnop
== 4
qrst
== 4
uvwx
== 2
2020/06/26 23:40:50 unexpected EOF
exit status 1
慕妹3146593
相关分类