カスタム構造体がエンコーディング/ゴブに登録されていない理由がわかりません
Gorilla セッションを保存しようとすると、次のエラーが発生します。
could not save session: securecookie: error - caused by: securecookie: error - caused by: gob: type not registered for interface: []*baseball.Athlete
これが構造体です
type Athlete struct {
AuthID string
DisplayName string
Email string
Coach string
}
init() 関数で構造体を登録しています
gob.Register(&baseball.Athlete{})
認証機能で、エンティティを含むセッションを保存しようとしました。
athlete := make([]*baseball.Athlete, 0)
_, err = q.GetAll(ctx, &athlete)
if len(athlete) == 0 {
athlete := &baseball.Athlete{
AuthID: id_token.Sub, // I'm using id_token.sub which is unigue to Google, not sure if other Oauth2 providers have equivalent
Email: id_token.Email,
}
_, err := datastore.Put(ctx, datastore.NewIncompleteKey(ctx, "Athlete", nil), athlete)
if err != nil {
return appErrorf(err, "authgo: new Athlete put failed: %v", err)
}
}
oauthFlowSession.Values[currentAthleteKey] = athlete
log.Printf("$#$#$#$#$#$2 in auth.go athlete is type: %T", athlete)
if err := oauthFlowSession.Save(r, w); err != nil {
return appErrorf(err, "could not save session: %v", err)
}
エラーのサーバーログは次のとおりです。
2019/07/24 21:05:56 athlete is type []*baseball.Athlete
2019/07/24 21:05:56 Handler error: status code: 500, message: could not save session: securecookie: error - caused by: securecookie: error - caused by: gob: type not registered for interface: []*baseball.Athlete, underlying err: securecookie.MultiError{securecookie.cookieError{typ:1, msg:"", cause:securecookie.cookieError{typ:1, msg:"", cause:(*errors.errorString)(0xc4201f8a60)}}}
さまざまなバリエーション:
gob.Register([]*baseball.Athlete) ==> エラー: タイプ []*baseball.Athlete は式ではありません
補足質問ですが、「[]*baseball.Athlete」はなんと言いますか?
推測ですが、「baseball.Athlete 構造体へのポインタであるスライス」