Golangの文字列のフォーマット書式について一通りまとめてみた

Golang

文字列のフォーマットは、文字列を動的に作成する必要がある場合に必要不可欠です。

そこで本記事では、Golangの文字列フォーマットを使って何ができるかを深く掘り下げていきます。

Golangで文字列をフォーマットするさまざまな方法

文字列のフォーマットを行うには、大きく分けて2つの方法があります。

  • Printf()関数を使用して、フォーマットされた文字列を表示する
  • Sprintf()関数を使用して、ターミナルに表示する代わりに、文字列を作成して返す

これらの関数は両方ともfmtパッケージから利用できます。

Golangで文字列をフォーマットするためにPrintf()関数を使用する

Printf()関数を使用すると、フォーマットされた文字列をコンソールに出力することができます。そこで、printf関数を使って書式付き文字列を作成してみましょう。

実際の値をフォーマットする

実際の値は、シンプルで簡単な方法でフォーマットすることができます。そこで、まずint型から始めてみましょう。

int型の値を表示するには、「%d」を使用します。

fmt.Printf("%d", 98)    // 98

浮動小数点を表示するには、次のように 「%f」を使用します。

fmt.Printf("%f", 10.2)    // 10.20000

float型は、以下のように科学的記数法を用いることもできる。

fmt.Printf("%e\n", 55000000.45)    // 5.500000e+07
fmt.Printf("%E\n", 73000000.45)    // 7.300000E+07

float型は自由に書式を設定することができます。

bool値は 「%t」 を使用してフォーマットします。

fmt.Printf("%t", true)    // true

文字は、「%c」フォーマッターを使用してフォーマットすることができます。

fmt.Printf("%c", 'x')    // x

文字列をフォーマットするには、「%s」フォーマッタを使用します。

fmt.Printf("%s", "Hello World")    // Hello World
 
// 文字数を指定してフォーマットする場合
fmt.Printf("|%8s|", "orange")   // |   orange|

エンコードされた値のフォーマット

バイナリーをフォーマットするには、「%b」を使用します。

fmt.Printf("%b", 98)    // 1100010%

16進の値は、「%x」で単純にフォーマットすることができます。

fmt.Printf("%x", 123)    // 11000107b

値のデータ型を取得する

値の型を表示するには、「%T」フォーマッタを使います。(大文字のTです)

fmt.Printf("%T", 98)    // int

ポインタ型の値のフォーマット

ポインターは、「%p」フォーマッターを使用してフォーマットすることができます。

package main

import (
	"fmt"
)

func main() {
	var x *int // ポインタ型を定義
	var y int

	y = 98
	x = &y 

	fmt.Printf("%p", x) // 0xc000132008
}

構造体のフォーマット

構造体の値を表示するには、「%v」を使用します。

また、「%+v」は構造体のフィールド名を含みます。また、「%#v」は構造体の Go-representationを表示します。

以下はそのコード例です。

package main

import (
	"fmt"
)

type Person struct {
	name string
}

func main() {
	name := Person{"Tanaka"}

	fmt.Printf("%v\n", name) // {Tanaka}

	fmt.Printf("%+v\n", name) // {name:Tanaka}

	fmt.Printf("%#v\n", name) // main.Person{name:"Tanaka"}
}

Sprintf() 関数を使ったGolang文字列のフォーマット書式

Sprintf関数は、文字列を作成して返します。ターミナルに表示せずに整形された文字列を作成することができます。

s := fmt.Sprintf("%d", 98)    // 文字列を作成する
fmt.Println(s)                // 98
タイトルとURLをコピーしました