invalid memory address or nil pointer dereference🫠(なんてこった)

はい、、goの個人開発してたらでました、、

いまだにポインタを理解できていないのか😮‍💨

と言うことでお勉強

値とポインタの違い

今回出たのはポインタで初期化した構造体のフィールドに値を代入しようとした際

var res &model.User
res.UserUUID = rslt.UserUUID <- ここ

これダメなんか🤒

ポインタで初期化すると明示的に値を指定していないフィールドはnilになるので参照しようとするとpanic

ポインタの初期化はnilポインタなのね。いつも何気なく使ってたnew()君はよしなにやってくれていたというお話です

値の初期化

これはOK

var user model.User
// fieldにアクセス
fmt.Println(user.Name)

値初期化はフィールドがゼロ値に設定

newでのポインタ初期化

これもOK

user = new(model.User)
// fieldにアクセス
fmt.Println(user.Name)

new()君はよしなに各フィールドにゼロ値を設定してくれてた

ポインタ初期化

これはダメ

user = &model.User
// fieldにアクセス
fmt.Println(user.Name)

ポインタの単なる初期化はnilで設定されている

以上です〜〜〜〜〜

目次