Go言語でコンソール上の文字色を変える
2017/08/16
Go言語で作るアプリは基本コンソール上のものなので、文字色が変えられたらいいなと思っていましたが、エスケープ文字を駆使すれば可能みたいです。まあ、このエスケープ文字はGo言語特有ではなくC言語とかでも同じなのですが、それなりにうまくいったので書き留めておきます。
ちなみに、Windowsの場合、コマンドプロンプトではできませんでしたがPowerShellだと色がちょっと変ですが色を変えられるみたいです。これについては後述します。
[ad#top-1]
コンソール上の文字色を変えるエスケープ文字
文字を表示する前に「\x1b[31m」というエスケープ文字を入れれば色が変わります。31というのは赤を示しています。
例えば文字を赤くしたい場合、以下の通りとなります。
fmt.Printf("\x1b[31m%s\n", "文字を赤くする")
このままだと、この後に続く文字も赤になってしまうので、文字の最後に「\x1b[0m」を入れて書式クリアすると良いです。
fmt.Printf("\x1b[31m%s\x1b[0m\n", "文字を赤くする")</div>
文字色に関係するエスケープ文字は下表のとおりです。上の31のところを変えればいろいろな文字色に切り替わります。
code | 文字色 | code | 背景色 |
30 | 黒 | 40 | 黒 |
31 | 赤 | 41 | 赤 |
32 | 緑 | 42 | 緑 |
33 | 黄 | 43 | 黄 |
34 | 青 | 44 | 青 |
35 | マゼンダ | 45 | マゼンダ |
36 | シアン | 46 | シアン |
37 | 白 | 47 | 白 |
ソースコード
文字色をいろいろ変えたプログラムサンプルです。
package main import ( "fmt" ) func main() { fmt.Printf("\x1b[1m%s\x1b[0m\n", "1:BOLD") //文字色 fmt.Printf("\x1b[30m%s\x1b[0m\n", "30:Black (ForeColer)") fmt.Printf("\x1b[31m%s\x1b[0m\n", "31:Red (ForeColer)") fmt.Printf("\x1b[32m%s\x1b[0m\n", "32:Green (ForeColer)") fmt.Printf("\x1b[33m%s\x1b[0m\n", "33:Yellow (ForeColer)") fmt.Printf("\x1b[34m%s\x1b[0m\n", "34:Blue (ForeColer)") fmt.Printf("\x1b[35m%s\x1b[0m\n", "35:Magenta (ForeColer)") fmt.Printf("\x1b[36m%s\x1b[0m\n", "36:Cyan (ForeColer)") fmt.Printf("\x1b[37m%s\x1b[0m\n", "37:White (ForeColer)") //ここから背景色。色によって文字色を白(37)/黒(30)に切り替え fmt.Printf("\x1b[37m\x1b[40m%s\x1b[0m\n", "40:Black (BackColor)") fmt.Printf("\x1b[37m\x1b[41m%s\x1b[0m\n", "41:Red (BackColor)") fmt.Printf("\x1b[37m\x1b[42m%s\x1b[0m\n", "42:Green (BackColor)") fmt.Printf("\x1b[37m\x1b[43m%s\x1b[0m\n", "43:Yellow (BackColor)") fmt.Printf("\x1b[37m\x1b[44m%s\x1b[0m\n", "44:Blue (BackColor)") fmt.Printf("\x1b[37m\x1b[45m%s\x1b[0m\n", "45:Magenta (BackColor)") fmt.Printf("\x1b[30m\x1b[46m%s\x1b[0m\n", "46:Cyan (BackColor)") fmt.Printf("\x1b[30m\x1b[47m%s\x1b[0m\n", "47:White (BackColor)") }
実行(Linux)
上のプログラムを実際に実行してみましょう。まずはLinux(lubuntu)で実行してみました。
ご覧の通り、文字色がちゃんと変わっています。(白が若干グレー色になっているのが気になりますが…)
実行(Windows)
では、Windowsではどうなのかというと、まずはコマンドプロンプト…ありゃありゃ、エスケープ文字が文字化けしていますね。
次にPowerShellだとどうかというと、以下の通り色が変わっています。ただ、指定した文字色になっていないところもありますね。例えば黄色を指定したつもりが薄いグレーになってしまっています。
上記のPowerShellはデフォルトの文字色や背景色を変えた上で実行していますが、デフォルト色だとあまり見栄え良くありません。
ということで、Windowsではあんまりおすすめできないですね。
[ad#ad-1]
スポンサーリンク