golang丝网印刷带颜色属性的格式化数据

golang丝网印刷带颜色属性的格式化数据,go,colors,formatting,attributes,Go,Colors,Formatting,Attributes,要打印格式为典型格式的行/列表吗 fmt.Printf(“%5s%5s%5s\n”,第1列、第2列、第3列) 当然,如果字符串是纯文本,但如果字符串具有显示属性,则可以正常工作 与颜色、粗体、字体一样-即使可见数据的长度与纯文本相同, 在%5s内就可以了;执行len(col1)要长得多,因为它会使表对齐方式倾斜 Printf有没有办法实现这一点,或者另一个std-Go包 想要: 项目 ===== ===== ==== abc-defgh-xyz x abc d vv xxxxx zz Pr

要打印格式为典型格式的行/列表吗 fmt.Printf(“%5s%5s%5s\n”,第1列、第2列、第3列)

当然,如果字符串是纯文本,但如果字符串具有显示属性,则可以正常工作 与颜色、粗体、字体一样-即使可见数据的长度与纯文本相同, 在%5s内就可以了;执行len(col1)要长得多,因为它会使表对齐方式倾斜

Printf有没有办法实现这一点,或者另一个std-Go包

想要:

项目
=====   =====  ====
abc-defgh-xyz
x abc d
vv xxxxx zz
Printf有没有办法做到这一点

没有

还是另一个std Go套餐

没有


(您所谓的“显示属性”是字节输出流的一部分,它们不是“属性”,这是终端仿真器解释的“内联数据”。您可以做的是在打印之前过滤掉这些内联数据。)

您可以将如何输出表格作为示例,或者只使用包。

根据chalk to gchalk的搬运工Jason Walton的建议。我获得了fmt.Printf%s以满足我的需要,尽管如果字段宽度(%s)很窄,它们可能会出现问题

我想将至少两个字符串连接在一起,以提供给一个%s。 第一个字符串是纯文本(sgCharToPrint),下一个字符串是彩色的,因此它是实际的屏幕文本(missedRaw)(missed是颜色字符串,例如用ansi格式字符包装的missedRaw)

myLen=len(sgCharToPrint)+len(missedRaw)

padded=sgCharToPrint+missed+strings。重复(“,30-olen)

fmt.Printf(“%30s%4d%10s\n”,填充,值,尾部)


现在“表格”显示保持对齐。

您能否提供您的代码,以便其他人更容易修改和处理它,以及查看演示的问题?添加了代码。我所说的打印是指“到屏幕”。虽然这可以制作漂亮的表格并使用颜色,但它似乎不允许根据运行时逻辑对特定单元格进行着色(我可能错了)…不幸的是,这正是我想要的,添加颜色以突出不同的环境。
Item    Item   Item
=====   =====  ====
abc     defgh  xyz
x       abc    d
vv      xxxxx                 zz      <=== this happens if string xxxxx has display attributes from
                                            fatih,gchalk, etc. to set foreground/background color
var colorWithGchalk = gchalk.Red
var data = []string{"one", "ten", "twenty"}

gchalk.SetLevel(gchalk.LevelAnsi16m) // seems needed for gitbash

// note output columns framed by <> just to see actual width

fmt.Println("desired formatted output")
fmt.Printf("<%-10s>  <%-10s>  <%-10s>\n\n", data[0],data[1],data[2])

/*
** gchalk
*/
// first try using gchalk for color
// colorize second column - column width ignored?
fmt.Println("colorized field loses its 10 character width, so subsequent fields now misaligned")
fmt.Printf("<%-10s>  <%-10s>  <%-10s>\n", data[0], colorWithGchalk(data[1]), data[2])

// same as above but eliminate gchalk function and just apply colorizing directly - same result
fmt.Printf("<%-10s>  <%-10s>  <%-10s>\n", data[0], gchalk.Red(data[1]), data[2])

/*
** fatih
*/

fmt.Println("\nwith fatih")
var colorWithFatih = color.New(color.FgRed).SprintFunc()
fmt.Printf("<%-10s>  <%-10s>  <%-10s>\n", data[0], colorWithFatih(data[1]), data[2])