1 回答
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個贊
您的示例已經(jīng)將錯誤打印到stdout和stderr。
默認(rèn)情況下,cobra包將遇到的任何錯誤打印到stderr,除非您特別更改它。
所以運(yùn)行 ./main provide apps something 2> ./stderr.txt會創(chuàng)建一個包含以下內(nèi)容的文本文件(這是 cobra 在stderr沒有您干預(yù)的情況下寫入的內(nèi)容):
Error: app name doesnt exist
并運(yùn)行./main provide apps something > ./stdout.txt- 創(chuàng)建一個包含以下內(nèi)容的文本文件(您自己打印了fmt.Println(err),代碼中從底部開始的第二行):
app name doesnt exist
這意味著默認(rèn)行為會向stdout和stderr打印錯誤。
正如 Devin 所建議的那樣,將最后一行更改為os.Stderr.WriteString(err)or fmt.Fprintln(os.Stderr, err)(我會使用的那一行)將使您的項(xiàng)目將 所有內(nèi)容打印到stderronly,這意味著打印錯誤兩次:
Error: app name doesnt exist app name doesnt exist
了解 cobra 允許您對錯誤打印行為進(jìn)行一些控制可能會很有用。例如,您可以告訴 cobra 命令要打印到哪個流:
command.SetOutput(os.Stdout) // Defaults to os.Stderr
您還可以防止打印錯誤:
command.SilenceErrors = true
或阻止打印使用文本:
command.SilenceUsage = true
- 1 回答
- 0 關(guān)注
- 168 瀏覽
添加回答
舉報
