fmt

About

書式付きの入出力機能を提供するパッケージ。

Examples:

const name, age = "Kim", 22
fmt.Println(name, "is", age, "years old.")
_, err := fmt.Printf("%s is %d years old.\n", name, age)

if err != nil {
    fmt.Fprintln(os.Stderr, "Error occured!!")
    fmt.Fprintf(os.Stderr, "Fprintf: %v\n", err)
}

関連項目:

書式指定子

だいたいprintfと一緒だけど、違うやつとか難しいやつを出くわしたときに追記していくつもり。

%v, %+v, %#v が便利。

書式値の型説明
%sany文字列として出力。 String() メソッドがあれば使われる。 []byte も文字列として出力される
%vany値のデフォルトの書式で出力
%+vstructフィールド名も表示してくれる
%#vstruct%+v と似てるが、値がポインタであっても名前が取れたりする
%pポインタ0x プレフィックス付きの16進数でアドレスを表示
%bint2進数
%cint数値コードに対応するUnicode文字を表示
%dint10進数
%oint8進数
%Oint8進数。 0o prefix付き
%qint数値コードに対応する文字をシングルクォート付きで表示。必要に応じてエスケープもされる。例: '\''
%xint16進数
%Xint16進数。 0x prefix付き
%UintUnicode表記。例: U+1234U+%04X と同じ

参考:

func Errorf

https://pkg.go.dev/fmt?tab=doc#Errorf

func Errorf(format string, a ...interface{}) error

書式付きメッセージを使ってerrorを作るときに便利な関数。
更に、 %w にerror型の値を入れることで、そのエラーをラップしたerrorを作れる。

Example:

err := fmt.Errorf("Error occured! %w", errors.New("I am guilty!"))
fmt.Printf("Error: %v", err)

実行結果:

$ go run main.go
Error: Error occured! I am guilty!

関連項目:

func Scan

https://pkg.go.dev/fmt?tab=doc#Scan

func Scan(a ...interface{}) (n int, err error)

標準入力からスペース区切りで入力を受付け、変数に格納する。
改行もスペースとみなされる。
読み取った数が引数より少なかったらエラーを返す。

Hints:

  • 任意の入力ソースから読み取るには、Fscan, Fscanf, Fscanlnを使う。
  • 入力の要素数が不定の場合は、bufio.Scannerを使うといい

Examples:

var a, b string
fmt.Scan(&a, &b)

実行例:

# それぞれa, bにセットされる
$ go run main.go
x y

# 改行しても次の文字列を入れるまで終わらない
$ go run main.go
x
y

# zは捨てられる
$ go run main.go
x y z

func Scanln

func Scanln(a ...interface{}) (n int, err error)

Scanと似ているが、改行で処理を止める。
最後の引数の後に改行を期待するので、入力が引数より多くてもNG.

Examples:

var a, b string
fmt.Print("Input 2 strings: ")
n, e := fmt.Scanln(&a, &b)
if e != nil {
        panic(e)
}
fmt.Printf("Read %d words. a = %s, b = %s\n", n, a, b)

実行例:

$ go run main.go
Input 2 strings: x y
Read 2 words. a = x, b = y

# 入力を与えずに改行するとエラー
$ go run main.go
Input 2 strings: 
panic: unexpected newline

goroutine 1 [running]:
main.main()
        main.go:12 +0x27f
exit status 2

func Sprintf

https://pkg.go.dev/fmt?tab=doc#Sprintf

シグネチャ:

func Sprintf(format string, a ...interface{}) string

Examples:

const name, age = "Kim", 22
s := fmt.Sprintf("%s is %d years old.\n", name, age)