我正在使用制表符,但无法使用颜色。我正在使用“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 关注
- 194 浏览
添加回答
举报
0/150
提交
取消