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]
スポンサーリンク


