我正在为一个项目开发代码生成器,有时需要等待用户输入才能继续。但是,我发现读取用户输入的常用方法不会等待用户输入某些内容,然后再继续运行go generate。但是,如果我以通常的方式运行脚本go run,程序会按预期等待用户输入(尽管这不是我的选择)。
我要问的是:有没有办法让程序在运行时挂起并等待用户输入go generate?
我已经看到如何从控制台中的标准输入中读取?而且,虽然相关,但这不是完全相同的问题。
这是一个示例:
main.go
package main
import (
"bufio"
"log"
"os"
)
func main() {
for isFileOk := checkFile(); !isFileOk; {
log.Println("File requires manual update.")
log.Println("Hit [RETURN] when resolved.")
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
break
}
isFileOk = checkFile()
}
}
func checkFile() bool {
return false
}
generate.go
package main
//go:generate go run main.go
Running go run main.go,循环的单次迭代执行,然后等待我点击返回,然后再进行下一次迭代。运行go generate generate.go时,循环一遍又一遍地迭代而无需等待。
您可能会注意到,我真的不需要从用户那里读取任何数据,相反,我只需要从用户那里获得某种反馈,即他们已完成文件更新。如果有另一种方法让程序挂起直到用户完成,那也很好。
注意:我也尝试过使用bufio.Reader,fmt.Scanln()和io.ReadAll(os.Stdin)而不是bufio.Scanner但得到相同的结果。
12345678_0001
相关分类