亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 go generate 腳本中等待用戶輸入?

如何在 go generate 腳本中等待用戶輸入?

Go
智慧大石 2022-10-10 16:11:51
我正在為一個項目開發代碼生成器,有時需要等待用戶輸入才能繼續。但是,我發現讀取用戶輸入的常用方法不會等待用戶輸入某些內容,然后再繼續運行go generate。但是,如果我以通常的方式運行腳本go run,程序會按預期等待用戶輸入(盡管這不是我的選擇)。我要問的是:有沒有辦法讓程序在運行時掛起并等待用戶輸入go generate?我已經看到如何從控制臺中的標準輸入中讀???而且,雖然相關,但這不是完全相同的問題。這是一個示例:main.gopackage mainimport (    "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.gopackage main//go:generate go run main.goRunning go run main.go,循環的單次迭代執行,然后等待我點擊返回,然后再進行下一次迭代。運行go generate generate.go時,循環一遍又一遍地迭代而無需等待。您可能會注意到,我真的不需要從用戶那里讀取任何數據,相反,我只需要從用戶那里獲得某種反饋,即他們已完成文件更新。如果有另一種方法讓程序掛起直到用戶完成,那也很好。注意:我也嘗試過使用bufio.Reader,fmt.Scanln()和io.ReadAll(os.Stdin)而不是bufio.Scanner但得到相同的結果。
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

go generate generate.goforkmain.go使用 exec.Command,go generate沒有設置stdinfor main.go,所以main.go無法讀取鍵盤輸入os.Stdin。

另一種方法是直接從/dev/tty(unix) 或 System API(win) 讀取鍵盤事件:

package main


import (

        "fmt"

        "log"


        "github.com/eiannone/keyboard"

)


func main() {

        if err := keyboard.Open(); err != nil {

                panic(err)

        }

        defer func() {

                _ = keyboard.Close()

        }()


        for isFileOk := checkFile(); !isFileOk; {

                log.Println("File requires manual update.")

                log.Println("Hit [RETURN] when resolved.")


                char, key, err := keyboard.GetKey()

                if err != nil {

                        panic(err)

                }

                fmt.Println(char, key, err)


                if key == keyboard.KeyEsc {

                        return

                }

        }

}


func checkFile() bool {

        return false

}




查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號