如何使色彩与golang制表器配合使用?

ste*_*iss 5 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()
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 8

尽管接受的答案是这样说的,但有可能,您只需要非常小心字段长度。

用颜色+重置代码包裹每个“字段”(即特定的行和列)。如果所有代码的字符串长度相同,tabwriter会给你一个很好的结果。

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

在此处输入图片说明

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

请注意,我是初学者 Go 程序员。我并不声称我的代码有任何好处。


Elw*_*nar 4

简短回答

你不能。

天真的答案

使用该color.Color.SprintFunc()方法获取一个函数并使用该函数包装您的字符串。

真实答案

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

解决方案

编写一个替代制表符(算法并不复杂)来识别颜色字符序列并忽略它。