我正在使用tabwriter,我无法使用它来处理颜色。我正在使用" github.com/fatih/color"封装
基本上问题是我需要调用tabwriter w.Flush()
才能获得要渲染的颜色......如果我没有调用同花,我就无法切换颜色。
使用tabwriter格式化来调用Flush。
关于如何将两者结合起来的任何想法?
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()
}
答案 0 :(得分:3)
你不能。
使用color.Color.SprintFunc()
方法获取函数并使用此函数包装您的strigns。
这也不起作用,因为颜色是使用tabwriter
无法识别的特殊字符序列设置的,因此该行将缩短标记的两倍长度(一行设置颜色和一个回到标准颜色。)
写一个替代的tabwriter(algoerithm甚至不复杂)识别颜色字符序列并忽略它。
答案 1 :(得分:2)
尽管接受的答案是,但有可能,你只需要非常小心场长。
用颜色+重置代码包裹每个“字段”(即特定的行和列)。如果所有代码都具有相同的字符串长度,tabwriter
将为您提供良好的结果。
我在这里有一个粗略的演示:https://play.golang.org/p/r6GNeV1gbH
我在演示中没有这样做,但你也应该添加背景代码(你可以像RedText + YellowBackground
一样简单地添加它们),提供默认背景。通过这种方式,一切都将具有相同的长度,你也将获得后台支持。
请注意我是初学者Go程序员。我并不认为我的代码是好的。