猿问

如何让颜色与 golang tabwriter 一起使用?

我正在使用制表符,但无法使用颜色。我正在使用“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()

    }


慕丝7291255
浏览 195回答 2
2回答

素胚勾勒不出你

尽管接受的答案是这样说的,但有可能,您只需要非常小心字段长度。用颜色+重置代码包裹每个“字段”(即特定的行和列)。如果所有代码的字符串长度相同,tabwriter会给你一个很好的结果。我在这里有一个粗略的演示:https : //play.golang.org/p/r6GNeV1gbH我在演示中没有这样做,但您还应该添加背景代码(您可以像 中一样将它们简单地添加在一起RedText + YellowBackground),提供默认背景。通过这种方式,所有内容都将具有相同的长度,并且您还将获得背景支持。请注意,我是初学者 Go 程序员。我并不声称我的代码有任何好处。

莫回无

简答你不能。天真的答案使用该color.Color.SprintFunc()方法获取一个函数并使用该函数包装您的字符串。真实答案这也行不通,因为颜色是使用 无法识别的特殊字符序列设置的tabwriter,因此该行将缩短两倍标记的长度(一个用于设置颜色,另一个用于返回到标准色)。解决方案编写一个可识别颜色字符序列并忽略它的替代制表符(算法甚至并不复杂)。
随时随地看视频慕课网APP

相关分类

Go
我要回答