2 回答
TA贡献1830条经验 获得超9个赞
您正在声明一个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') 来代替或使用 Scanner。
调用UnreadByteafterReadLine将始终未读取读取的最后一个字节(可能是属于行尾的字符),即使该字节不是ReadLine. ReadLine要么返回非零行,要么返回错误,永远不会两者兼而有之。
所以这将是一个更好的选择:
scanner := bufio.NewScanner(bio)
for scanner.Scan() {
line := scanner.Text()
fmt.Printf("%v\n", line)
}
TA贡献1777条经验 获得超3个赞
您使用:=which 丢弃变量的先前内容。您不在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)
}
}
- 2 回答
- 0 关注
- 143 浏览
添加回答
举报