2017-12-12 8 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