我需要自动化类似波纹管的代码段的输入,其中ReadString的输入是不同的。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
buf := bufio.NewReader(os.Stdin)
value, err := buf.ReadString('\n')
if err != nil {
fmt.Println(err)
} else {
fmt.Println(value)
}
buf = bufio.NewReader(os.Stdin)
value, err = buf.ReadString('\n')
if err != nil {
fmt.Println(err)
} else {
fmt.Println(value)
}
}
我尝试了几种格式,像下面的this question回答下面的问题,不幸的是,没有一种有效。
>> echo "data1
data2" | go run main.go
output: data1
EOF
此处
data1
和data2
和单独的ReadString方法的输入。我无法控制源代码。因此,我只能尝试更改bash输入。如何解决这个问题?
最佳答案
发生这种情况是因为第二个字符串没有以换行符结尾。查看ReadString
的文档:
如果ReadString在找到定界符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常为io.EOF)。
因此,即使错误不是非零,您也有数据。以下更改应适用于此特定情况:
buf = bufio.NewReader(os.Stdin)
value, err = buf.ReadString('\n')
if value!="" {
fmt.Println(value)
}
if err != nil {
fmt.Println(err)
}
通常,即使从
ReadString
遇到错误,也可能从函数返回非空数据。
关于bash - 如何使用Bash自动执行两个OS.Stdin输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60156913/