go.mercari.io/datastore@v1.8.2/boom/doc_ja.go (about) 1 package boom 2 3 /* 4 Package boomは、面倒なdatastore.Keyに関する処理を自動的に処理してくれます。 5 Kind名やID, Nameをstructの名前やタグから計算してくれます。 6 7 8 Keyのハンドリング 9 10 boomはKeyとオブジェクトを綺麗にマッピングし、コードを書くのを楽にします。 11 KeyとEntityとなるオブジェクトをバラバラに扱うのは大変なので、オブジェクトにKeyの情報を持たせます。 12 KeyがIDかNameのみを持つ場合、扱いは非常に簡単です。 13 次のコードのように、 boom:"id" をタグに付与するだけです。 14 15 type Post struct { 16 ID int64 `datastore:"-" boom:"id"` 17 Content string 18 } 19 20 これで、Putする時はIDフィールドの値がKeyのIDとして、Getする時はKeyのIDの値がIDフィールドにセットされます。 21 これにより、プログラム中でKeyの面倒をみる必要はなくなります。 22 23 KeyのKindについても、自動的に計算されます。 24 デフォルトでは渡したstructの名前がKind名になります。 25 さっきのコードの例だと Post がKindになります。 26 明示的に指定したい場合、 boom:"kind" をタグに付与します。 27 次のコードの場合、Kind名はKindフィールドに何も値を入れていない場合、 pay になります。 28 Kindフィールドになにか値を入れていた場合は、その値がKind名になります。 29 30 type Payment struct { 31 Kind string `datastore:"-" boom:"kind,pay"` 32 ID int64 `datastore:"-" boom:"id"` 33 Amount int 34 } 35 36 ParentKeyについても、楽をする手段を用意してあります。 37 boom:"parent" をタグに付与すると、フィールドのKeyがParentKeyとして利用されます。 38 39 40 For goon user 41 42 boomはgoomとかなりのAPIの互換性があります。 43 44 トランザクション下でのPut時の振る舞いに差があります。 45 Cloud DatastoreではPutしてもCommitされるまでKeyのIDが採番されません。 46 Cloud Datastoreの仕様を踏襲している go.mercari.io/datastore では、バックエンドがAppEngine Datastoreであってもこれと同様の振る舞いをします。 47 よって、Putした後、Commitより前にIDを使う必要があれば、事前に自分でAllocateIDをしておく必要があります。 48 49 また、boomはキャッシュ周りの仕組みを何も持っていません。 50 それは、 go.mercari.io/datastore が持つミドルウェアで行うべきものだからです。 51 シンプルでいいでしょ? 52 */