Golang で struct を扱う時に nil プロパティを扱いたい

例えば type User struct { ... } を定義し、
u := User{} するとする。
するとそれぞれの型の初期値が勝手に代入されている。

int だと 0、string だと空文字、bool だと false のように。

API を開発している時などに、どうしても nil を扱いたい時がある。
そういう時はポインターを利用する。

下記の例では User.Profile の初期値を nil にしている。

package main


import (
	"fmt"
)


type User struct {
	ID int `json:"id"`
	Name string `json:"name"`
	Profile *string `json:"profile"`
	IsBan bool `json:"isBan"`
}


func main() {
	u := User{}
	// それぞれの型の初期値
	fmt.Print(u)// {0 "" <nil> false}

	// Profile に代入する時
	profile := "プロフィール"
	u.Profile = &profile

	// Profile を使う時
	// nil チェックをしないとバグの原因になったりする
	if u.Profile != nil {
		fmt.Print(*u.Profile)// プロフィール
	}
}
カテゴリー:Go