LoginSignup
0
1

More than 5 years have passed since last update.

DataStoreのEntityの存在チェック

Last updated at Posted at 2018-01-19

Entityの存在チェック方法

クエリで確認


func isExistsUser(g *goon.Goon, identifier string) (bool, error) {
    key := g.Key(&User{Identifier: identifier})
    var users []User
    q := datastore.NewQuery("User").Filter("__key__ =", key).Limit(1).KeysOnly()
    if _, err := g.GetAll(q, &users); err != nil {
        return false, err
    }
    if len(users) == 0 {
        return false, nil
    }
    return true, nil
}

クエリを組み立てて探す

Getで探す

↑のクエリでの検索は、トランザクション内の場合に「Only ancestor queries are allowed inside transactions」と言われて実行出来ない。
その場合はGetで探す

user := &User{Identifier: identifier}
err := g.Get(user)
if err != nil {
  if err != datastore.ErrNoSuchEntity {
    return nil, err
  } else {
    if _, err := g.Put(wallet); err != nil {
      return nil, err
  }
}
return wallet, nil

エラーチェックだけではなく、エラーがErrNoSuchEntityであることを確認すること。しないと他の要因でエラーが出た時に危ない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1