非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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]

スポンサーリンク

 - Go言語