如何使用golang tabwriter获取颜色?

时间:2016-02-14 21:56:44

标签: go

我正在使用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()
    }

2 个答案:

答案 0 :(得分:3)

简短回答

你不能。

天真的回答

使用color.Color.SprintFunc()方法获取函数并使用此函数包装您的strigns。

真实答案

这也不起作用,因为颜色是使用tabwriter无法识别的特殊字符序列设置的,因此该行将缩短标记的两倍长度(一行设置颜色和一个回到标准颜色。)

解决方案

写一个替代的tabwriter(algoerithm甚至不复杂)识别颜色字符序列并忽略它。

答案 1 :(得分:2)

尽管接受的答案是,但有可能,你只需要非常小心场长。

用颜色+重置代码包裹每个“字段”(即特定的行和列)。如果所有代码都具有相同的字符串长度,tabwriter将为您提供良好的结果。

我在这里有一个粗略的演示:https://play.golang.org/p/r6GNeV1gbH

enter image description here

我在演示中没有这样做,但你也应该添加背景代码(你可以像RedText + YellowBackground一样简单地添加它们),提供默认背景。通过这种方式,一切都将具有相同的长度,你也将获得后台支持。

请注意我是初学者Go程序员。我并不认为我的代码是好的。