使用fmt.Scan()/fmt.Scanf()/fmt.Scanln()扫描包含空格的字符串? &g



使用Go语言,要读取带有空格的输入字符串,我必须使用

s, err := bufio.NewReader(os.Stdin).ReadString('n')

是否有办法使用fmt.Scan,fmt.Scanffmt.Scanln()?

如果您正在构建CLI工具,我强烈建议您查看cobra。它是用纯go语言编写的(参见依赖项),并被多个知名项目使用。

或者,我写了一个快速的(粗略的)示例来演示如何通过从stdin中线性读取单个字节来获得Reader接口的更好控制。

func byteByByte() [][]byte {
reader := bufio.NewReader(os.Stdin)
buffer, result := []byte{}, [][]byte{}
for {
c, err := reader.ReadByte()
if err != nil {
break
}
if c == byte(32) {
result, buffer = append(result, buffer), []byte{}
continue
}
buffer = append(buffer, c)
}
return result
}

在这里,我们临时缓冲结果,直到到达一个空间,此时,临时缓冲区被转储到一个更大的缓冲区。

这意味着作为一个示例,向您展示如何使用更多的控制/粒度阅读器界面,而不是作为一段代码逐字使用。

相关内容

  • 没有找到相关文章

最新更新