在Go语言中使用256种颜色。

huangapple go评论97阅读模式
英文:

Using 256 colors in Go

问题

如何在使用Golang的终端中使用256种颜色。

由于像faith/color这样的库只支持有限的颜色。

这个Python库 这里

使用一种默认代码和颜色代码在终端中打印彩色文本。

我尝试使用颜色代码,但是在Go程序中它只打印颜色代码,而在Python程序中它打印彩色文本。

我应该如何打印使用颜色代码,就像上述库所做的那样...

我需要初始化终端吗?如果是的话,应该如何初始化?

谢谢!

我希望在终端中打印256种颜色。

*Go版本:1.18.7

英文:

How Can I used 256 colors in terminal with Golang.

As Libraries like faith/color only have limited colors support.

This python library here

use some kind of default code and a color code to print colored text in terminal.

I try to use color code but instead of color it printing color code in go program but in python program it prints colored text.

How can I print color use color code as above library doing...

Do I need to initialize the terminal ? If yes How?

Thanks!

I am expecting 256 colors to print in terminal.

*go version: 1.18.7

答案1

得分: 0

Windows可能会有些奇怪。在某些情况下,您需要设置控制台模式。如果您正在使用Windows,请将其作为问题的一部分进行指定。

colors.go

package main

import (
	"fmt"
	"strconv"
)

func main() {
	setConsoleColors()

	for i := 0; i < 16; i++ {
		for j := 0; j < 16; j++ {
			code := strconv.Itoa(i*16 + j)
			color := "\u001b[38;5;" + code + "m"
			fmt.Printf("%s %-4s", color, code)
		}
		fmt.Println()
	}
	fmt.Print("\u001b[0m")
}

colors_windows.go

//go:build windows

package main

import "golang.org/x/sys/windows"

func setConsoleColors() error {
    console := windows.Stdout
    var consoleMode uint32
    windows.GetConsoleMode(console, &consoleMode)
    consoleMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
    return windows.SetConsoleMode(console, consoleMode)
}

colors_other.go

//go:build !windows

package main

func setConsoleColors() error {
    return nil
}
英文:

Windows can be weird. In some cases you need to set the console mode. If you are using Windows, specify it as part of your question.

colors.go:

package main

import (
	&quot;fmt&quot;
	&quot;strconv&quot;
)

func main() {
	setConsoleColors()

	for i := 0; i &lt; 16; i++ {
		for j := 0; j &lt; 16; j++ {
			code := strconv.Itoa(i*16 + j)
			color := &quot;\u001b[38;5;&quot; + code + &quot;m&quot;
			fmt.Printf(&quot;%s %-4s&quot;, color, code)
		}
		fmt.Println()
	}
	fmt.Print(&quot;\u001b[0m&quot;)
}

colors_windows.go:

//go:build windows

package main

import &quot;golang.org/x/sys/windows&quot;

func setConsoleColors() error {
    console := windows.Stdout
    var consoleMode uint32
    windows.GetConsoleMode(console, &amp;consoleMode)
    consoleMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
    return windows.SetConsoleMode(console, consoleMode)
}

colors_other.go:

//go:build !windows

package main

func setConsoleColors() error {
    return nil
}

huangapple
  • 本文由 发表于 2022年10月31日 18:20:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/74261816.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定