2017-12-12 9 views
0

にネストされた構造体を入れていませんaccount Accountの内容をデータストアに保存する直前に(Put(ctx, key, &account)、印刷するとAppUserの情報がすべて表示されますが、後でGetと入力すると、AppUserの情報は存在しません(ちょうど{[]}と表示されます) 。データストアは、構造体は次のようになりゴー

私は前に何の問題もなく、データストアにネストされた構造体のスライスを格納しているかなり確信しているので、私は...それを引き起こしている可能性がありますどのようになど、かなり混乱している


プットFUNC:

func PutAccount(ctx context.Context, acc Account) (*datastore.Key, error) { 
    if isValidUsername(acc.Username) != true { 
    return nil, errors.New("Invalid username.") 
    } 
    var hashedPassword []byte 
    if acc.RegistrationTime.IsZero() { 
    var err error 
    hashedPassword, err = bcrypt.GenerateFromPassword(acc.Password, 12) 
    if err != nil { 
     return nil, err 
    } 
    } else { 
    hashedPassword = acc.Password 
    } 
    account := Account{ 
    Username:   strings.ToLower(acc.Username), 
    Password:   hashedPassword, 
    RegistrationTime: time.Now(), 
    AppUser:   acc.AppUser} 
    fmt.Println("PutAccount, account:", account) // before saving it prints the AppUser without problems 
    key := datastore.NameKey("Account", account.Username, nil) 
    return database.DatastoreClient().Put(ctx, key, &account) 
} 

ゲットFUNC:

func GetAccount(ctx context.Context, key *datastore.Key) (Account, error) { 
    var account Account 
    err := database.DatastoreClient().Get(ctx, key, &account) 
    if err != nil { 
    return account, err 
    } 
    return account, nil 
} 
+1

データを取得して配置するコードを示してください。 'Get'のフラットな構造体を試してみることもできます。 – Marc

+0

また、https://stackoverflow.com/questions/14308530/nested-structs-on-gae-datastore-using-go?rq=1 – Marc

+0

@Marcをご覧ください。編集を参照してください。私はその答えに気づいたが、私はドキュメントがかなり複雑で複雑であることを発見した – fisker

答えて

1

という名前の構造体の作品を使用しました。例えば:なぜ匿名の埋込み構造体については

type Account struct { 
    Username   string // NameKey 
    Password   []byte `datastore:",noindex"` 
    RegistrationTime time.Time `datastore:",noindex"` 
    AppUser   AppUser 
} 

、これはおそらくissueの価値がありません。

+0

ありがとう、本当にありがとうございます。<3 – fisker

+1

名前が付けられていれば本当に「埋め込まれていません」、 – JimB

+0

ポイント、固定。 – Marc