2

カスタム構造体がエンコーディング/ゴブに登録されていない理由がわかりません

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 構造体へのポインタであるスライス」

4

0 に答える 0