例えば 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)// プロフィール
}
}