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  */