我正在使用制表符,但無法使用顏色。我正在使用“github.com/fatih/color”包。基本上問題是我需要調用 tabwriter'sw.Flush()以便讓顏色呈現......如果我沒有調用刷新,我就無法切換顏色。依次調用 Flush 與 tabwriter 格式。關于如何將兩者結合的任何想法? package main import "fmt" import "text/tabwriter" import "os" import "github.com/fatih/color" func main() { w := new(tabwriter.Writer) w.Init(os.Stderr, 0, 8, 0, '\t', 0) color.Set(color.FgGreen) fmt.Fprintln(w, "ID\tNAME\tSIZE\tFIELD1\tSTATUS\tSTATE") // ------> Calling w.Flush() here cases problems. color.Set(color.FgYellow) fmt.Fprintln(w, "8617833164795356724\tfoo1\t1.1 Gb\t3\tsome_status\tsome_state") fmt.Fprintln(w) w.Flush() }
2 回答

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
盡管接受的答案是這樣說的,但有可能,您只需要非常小心字段長度。
用顏色+重置代碼包裹每個“字段”(即特定的行和列)。如果所有代碼的字符串長度相同,tabwriter
會給你一個很好的結果。
我在這里有一個粗略的演示:https : //play.golang.org/p/r6GNeV1gbH
我在演示中沒有這樣做,但您還應該添加背景代碼(您可以像 中一樣將它們簡單地添加在一起RedText + YellowBackground
),提供默認背景。通過這種方式,所有內容都將具有相同的長度,并且您還將獲得背景支持。
請注意,我是初學者 Go 程序員。我并不聲稱我的代碼有任何好處。

莫回無
TA貢獻1865條經驗 獲得超7個贊
簡答
你不能。
天真的答案
使用該color.Color.SprintFunc()
方法獲取一個函數并使用該函數包裝您的字符串。
真實答案
這也行不通,因為顏色是使用 無法識別的特殊字符序列設置的tabwriter
,因此該行將縮短兩倍標記的長度(一個用于設置顏色,另一個用于返回到標準色)。
解決方案
編寫一個可識別顏色字符序列并忽略它的替代制表符(算法甚至并不復雜)。
- 2 回答
- 0 關注
- 193 瀏覽
添加回答
舉報
0/150
提交
取消