DRYな備忘録

Don't Repeat Yourself.

datastore: invalid entity type

問題

cloud.google.com/go/datastore

datastore package - cloud.google.com/go/datastore - pkg.go.dev

を使ってDatastore  |  Google CloudにデータをPutしていて、掲題のエラーを得た。

ev := models.Event{/* なんらかの値 */}
if _, err := tx.Put(key, ev); err != nil {
    return err
}
datastore: invalid entity type

調査

まずエラーメッセージが貧弱なので、定義を知りたい。

Search · datastore: invalid entity type · GitHub

あった google-cloud-go/datastore.go at 1063c601a4c4a99217b45be0b25caa460e7157a1 · googleapis/google-cloud-go · GitHub

f:id:otiai10:20210905185048p:plain

あらためて、順当にPutを掘っていく。

f:id:otiai10:20210905190549p:plain

結論

Getのみならず、Put系であっても、Structの値はPointerである必要がある。

ev := models.Event{/* なんらかの値 */}
- if _, err := tx.Put(key, ev); err != nil {
+ if _, err := tx.Put(key, &ev); err != nil {
    return err
}

雑感

  • たしかにエラーメッセージとして十分だとは思うが、自作パッケージをつくるなら、もうちょっと丁寧に返したい
  • 最近、WETもDRYもぜんぜん書いてなくてさみしい

DRYな備忘録として