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