我试图在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
那么,我该如何定义“读者”?如果已定义,这是将输入捕获为字符串的正确方法,以“\ n”分隔,而不是在空格处?或者我应该做一些完全不同的事情?
提前致谢。
答案 0 :(得分:3)
更改
r := bufio.NewReader() *Reader
阅读
r := bufio.NewReader(os.Stdin)
解决问题。
原始加密是不正确的,因为您似乎只是从the spec复制并粘贴了方法的签名,但规范定义了签名,而不是调用的示例,因此*Reader
中有r
方法的返回类型(变量rd io.Reader
将具有的类型)。并且该方法的唯一参数定义为os.Stdin
;该界面可以通过{{1}}符号方便地实现,这似乎与您的任务完美匹配。
P.S。 请考虑阅读"Learning Go"文档部分中的所有文档,尤其是“Effective Go”。
答案 1 :(得分:1)
如果查看bufio.NewReader
的文档,则需要io.Reader
类型的参数(这是有道理的,因为它需要一个普通的读者并使其缓冲,类似于java.io.BufferedReader
在Java中,它也采用Reader
参数。什么是io.Reader
?查看其文档,它是一个接口,指定具有Read
方法的任何内容。许多类型都有Read
方法;最常见的是*os.File
。因此,您可以使用File
等构建os.Open
f, _ := os.Open(file)
r := bufio.NewReader(f)