答案 0 :(得分:2)
您正在声明一个不使用它的变量(moreline
)。这里有两个选项:要么用下划线替换moreline
,这意味着你可以省略返回值。
for moreline {
line, _, err := bio.ReadLine()
if err != nil {
log.Fatal(err)
}
fmt.Println(line)
}
但更好的选择是使用ReadScanner
,ReadBytes('\n')
或ReadString('\n')
。
检查bufio.go
文件,这是ReadLine
方法的描述:
ReadLine是一个低级读取线的原语。大多数来电者应该 请改用ReadBytes('\ n')或ReadString('\ n')或使用扫描仪。
在UnreadByte
之后调用ReadLine
将始终读取读取的最后一个字节(可能是属于行结尾的字符),即使该字节不是ReadLine
返回的行的一部分。 ReadLine
要么返回非零行,要么返回错误,而不是两者。
所以这是一个更好的选择:
scanner := bufio.NewScanner(bio)
for scanner.Scan() {
line := scanner.Text()
fmt.Printf("%v\n", line)
}
答案 1 :(得分:1)
使用:=
会丢弃变量的先前内容。您不在该范围内使用morelines
,因此出现错误消息。
如果您事先声明了变量并且未使用:=
,那么它可以正常工作。函数ReadLine()
可能无法完成您认为应该执行的操作。
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
bio := bufio.NewReader(os.Stdin)
var line []byte
var err error
moreline := true
for moreline {
line, moreline, err = bio.ReadLine()
if err != nil {
log.Fatal(err)
}
fmt.Println(line)
}
}