我有这个简单的代码来从控制台读取所有输入:
input := bufio.NewScanner(os.Stdin) //Creating a Scanner that will read the input from the console for input.Scan() { if input.Text() == "end" { break } //Break out of input loop when the user types the word "end" fmt.Println(input.Text()) }
代码是有效的.我想要做的是摆脱if子句.在我对文档的理解中,如果一行是空的,input.Scan()
则返回false,因此会脱离循环.
扫描将扫描仪推进到下一个令牌,然后可通过字节或文本方法使用该令牌.扫描停止时返回false,或者到达输入结束或出错.在Scan返回false之后,Err方法将返回扫描期间发生的任何错误,除非是,否则
io.EOF
Err将返回nil.如果拆分功能返回100个空标记而不提前输入,则扫描恐慌.这是扫描仪的常见错误模式.
我是否误解了文档,实际上有必要让这样的if子句突破?(我正在使用Go 1.5.2使用"go run"运行程序.)
我想你误解了文档.默认扫描仪是ScanLines功能.
文件说:
ScanLines是扫描仪的分割功能,它返回每行文本,去掉任何尾端行标记.返回的行可能为空.行尾标记是一个可选的回车符,后跟一个强制换行符.在正则表达式表示法中,它是
\r?\n
.即使没有换行,也会返回最后一个非空的输入行.
这里有两个要点:
返回行可能为空:表示返回空行.
即使没有换行,也会返回最后一个非空的输入行:这意味着如果文件的非最后一行,则总是返回该行.然而,这并不意味着空行结束了流.
扫描仪将在EOF(文件结束)上停止.例如,键入Ctrl-D将发送文件结束并停止扫描仪.