我有以下代码:
package main
import "fmt"
func main() {
if scanln_test() {
fmt.Println("Success!")
}
}
func scanln_test() bool {
fmt.Print("Please type yes or no and then press enter [y/n]: ")
var response string
fmt.Scanln(&response)
if response == "y" {
return true
} else if response == "n" {
return false
} else {
return scanln_test()
}
}
通过管道执行编译后的二进制文件时,例如:
$ echo "just-showing-how-pipe-affects-the-behavior" | ./scanln
我得到函数fmt.Print内部的无限输出。scanln_test但是,当我不通过管道执行它时,一切正常。
有没有办法解决这个问题?
UPD。当使用管道执行二进制文件时,fmt.Scanln 返回“EOF”作为错误
UPD2。上面带有 echo 的示例只是为了说明管道,但我不想在我的 go 程序中阅读此 echo 的内容。真实案例如下所示:wget -qO- http://example.com/get | sh -s "param". 我在这个下载的 shell 脚本中有执行 go 程序,我希望我的程序用 Y/N 向用户显示对话。我不确定这是否可能,所以现在我决定摆脱管道并像wget -qO- http://example.com/get | sh && go-program "param".
慕工程0101907
呼啦一阵风
明月笑刀无情
随时随地看视频慕课网APP
相关分类