我试图在 Go 中捕获用户输入,但运气不佳。我可以让非空格词工作:
var s string
println("enter string:")
fmt.Scan(&s)
但是,Go 文档说扫描将在空格和新行处定界。所以我想我必须设置 bufio.Reader 的 ReadLine。这是我的尝试,它不会编译:
package main
import (
"bufio"
"os"
"fmt"
)
const delim = '\n'
const file = "file"
func main() {
r := bufio.NewReader() *Reader
println("enter string:")
line, err := r.ReadString(delim)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(line)
}
错误:
1.go:14: not enough arguments in call to bufio.NewReader
1.go:14: undefined: Reader
那么,我该如何定义“Reader”呢?如果定义了它,这是否是将输入捕获为字符串的正确方法,以“\n”而不是空格分隔?还是我应该做一些完全不同的事情?
提前致谢。
最佳答案
改变
r := bufio.NewReader() *Reader
阅读
r := bufio.NewReader(os.Stdin)
解决问题。
原来的咒语是不正确的,因为你似乎只是从 the spec 复制并粘贴了方法的签名。 ,但规范定义了签名,而不是调用示例,因此 *Reader
中有方法的返回类型(您的变量 r
将具有的类型)。该方法的唯一参数定义为 rd io.Reader
;该接口(interface)由 os.Stdin
符号方便地实现,这似乎与您的任务完美匹配。
附言 考虑阅读 "Learning Go" 中的所有文档文档部分,尤其是“Effective Go”。
关于user-input - 捕获间隔的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452641/