Help us understand the problem. What is going on with this article?

忘れがちなGo言語の書式指定子を例付きでまとめた

More than 1 year has passed since last update.

Goの書式指定子

忘れがちな書式指定子

いちいち調べるのも面倒臭いので、普段使いそうな書式指定子の使い方を例付きでまとめた

各書式指定子の説明文は、基本的に以下のサイトを引用させていただいている
引用元: go fmtパッケージ

各書式指定子の使い方

%v デフォルトフォーマット

%v デフォルトフォーマットを適用した値
構造体を出力する際、+フラグ(%+v)を加えるとフィールド名が表示される

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {
    p := new(Person)
    p.Name = "sekky"
    p.Favorite = "Programming"
    fmt.Printf("構造体 = %v", p)
}

結果

構造体 = &{sekky Programming}

%+v フラグ付き デフォルトフォーマット

フラグ(%+v)を加えるとフィールド名が表示される

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {
    p := new(Person)
    p.Name = "sekky"
    p.Favorite = "Programming"
    fmt.Printf("構造体 = %+v", p)
}

結果

構造体 = &{Name:sekky Favorite:Programming}

%#v Go言語の構文で表現

%#v この値をGo言語の構文で表現する

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {
    p := new(Person)
    p.Name = "sekky"
    p.Favorite = "Programming"
    fmt.Printf("構造体 = %#v\n", p)

    a := [...]string{"Go", "Java", "Python", "Ruby", "Rust"}
    fmt.Printf("配列 = %#v", a)
}

結果

構造体 = &main.Person{Name:"sekky", Favorite:"Programming"}
配列 = [5]string{"Go", "Java", "Python", "Ruby", "Rust"}

%T 値の型

%T この値の型をGo言語の構文で表現する

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {
    p := new(Person)
    p.Name = "sekky"
    p.Favorite = "Programming"
    fmt.Printf("構造体 = %T\n", p)

    a := [...]string{"Go", "Java", "Python", "Ruby", "Rust"}
    fmt.Printf("配列 = %T\n", a)

    s := []int{0, 1, 2}
    fmt.Printf("スライス = %T\n", s)

    n := 7
    fmt.Printf("int = %T\n", n)

    str := "sekky"
    fmt.Printf("string = %T\n", str)

    b := true
    fmt.Printf("bool = %T\n", b)
}

結果

構造体 = *main.Person
配列 = [5]string
スライス = []int
int = int
string = string
bool = bool

%t 単語、trueまたはfalse

%t 単語、trueまたはfalse

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {

    b := true
    fmt.Printf("%t\n", b)

    b = false
    fmt.Printf("%t\n", b)

    str := "Go"
    fmt.Printf("%t\n", str)

    n := 1
    fmt.Printf("%t\n", n)

    p := new(Person)
    p.Name = "sekky"
    fmt.Printf("%t\n", p)


}

結果

true
false
%!t(string=Go)
%!t(int=1)
&{%!t(string=sekky) %!t(string=)}

%s 文字列、スライス

%s 文字列またはスライスそのまま

package main

import (
    "fmt"
)

func main() {

    str := "Go"
    fmt.Printf("文字列 = %s\n", str)

    s := []string{"Go", "Java"}
    fmt.Printf("スライス = %s", s)

    // 配列では使用できないため、以下のコードはエラーになる
    // s := [2]string{"Go", "Java"}
    // fmt.Printf("配列 = %s", s)

}

結果

文字列 = Go
スライス = [Go Java]

数値系

数値系はまとめて書く
コメント部分は以下を引用
引用元 : go fmtパッケージ

package main

import (
    "fmt"
)

func main() {

    // %b 基数2
    b := 5
    fmt.Printf("基数2 = %b\n", b)

    // %c 対応するUnicodeコードポイントによって表される文字
    c := '\101'
    fmt.Printf("Unicodeコードポイント = %c\n", c)

    // %d 基数10
    d := 5
    fmt.Printf("基数10 = %d\n", d)

    // %o 基数8
    o := 20
    fmt.Printf("基数8 = %o\n", o)

    // %x 基数16、10以上の数には小文字(a-f)を使用
    x := 2059
    fmt.Printf("基数16、10以上の数には小文字(a-f)を使用 = %x\n", x)

    // %X 基数16、10以上の数には大文字(A-F)を使用
    X := 2059
    fmt.Printf("基数16、10以上の数には大文字(A-F)を使用 = %X\n", X)

    // %U ユニコードフォーマット: U+1234; "U+%x"と同じ。デフォルトは、4桁
    U := '\101'
    fmt.Printf("ユニコードフォーマット = %U\n", U)

}

結果

基数2 = 101
Unicodeコードポイント = A
基数10 = 5
基数8 = 24
基数1610以上の数には小文字(a-f)を使用 = 80b
基数1610以上の数には大文字(A-F)を使用 = 80B
ユニコードフォーマット = U+0041


ポインタ

%p 16進数文字列、先頭に0x

package main

import (
    "fmt"
)

type Person struct {
    Name     string
    Favorite string
}

func main() {
    p := new(Person)
    p.Name = "sekky"
    p.Favorite = "Programming"
    fmt.Printf("構造体 = %p", p)
}

結果

構造体 = 0x1040a130

参考文献

松尾 愛賀 (2016/4/15)『スターティングGo言語』 翔泳社

参考にさせていただいたサイト

go fmtパッケージ

ブログでも同一記事を投稿している

忘れがちなGo言語の書式指定子を例付きでまとめた - sekky0905’s blog〜文系元営業プログラミング未経験からエンジニアへ〜

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away