The Round

合同会社ナイツオの開発ブログ

[PR] 5分から相談できるGCP™ 開発コンサル!→こちら

GAE/Go Datastore特有の機能~プロパティのタグ付け~

注:古い記事の為、内容が最新ではない可能性がありますm(_ _)m

どうもこんにちわ!マツウラです。

前回はDatastoreインターフェースにおいてGo言語特有の機能であるPropertyLoadSaverについてでした。
今回はプロパティのタグ付け機能について見てゆきます。

参考:The datastore package - Go — Google Developers The datastore package

プロパティのタグ

フィールドは`datastore:"name,options"`タグを持つことが出来ます(バッククォートも含みます)。

`name`はプロパティ名であり、"."で結合される1つ以上のGoの識別子である必要があり、小文字で始めることができます。
`name`が空であればフィールド名を使用することになります。
`name`に"-"ハイフンを付けた場合、データストアはそのフィールドを無視します。
`options`に"noindex"を付けると、フィールドはインデックス付けされません。
`options`に特に指定するオプションがなければ、タグのコンマは省略して構いません。

現在のところ、他にオプションはありません。

プロパティのタグ付け例

また500文字を超える文字列については、格納するためフィールドに"noindex"でタグ付けする必要があります。

プロパティのタグ付け例を次に示します。

type TaggedStruct struct {
    A int `datastore:"a,noindex"`
    B int `datastore:"b"`
    C int `datastore:",noindex"`
    D int `datastore:""`
    E int
    I int `datastore:"-"`
    J int `datastore:",noindex" json:"j"`
}

それでは上記のタグ付け例をそれぞれ見てゆきます。

通常はフィールド名がそのままプロパティ名となります。
しかしタグ付けを行うと、指定した名称に変更することができます。
フィールドAおよびBは、それぞれ小文字のaおよびbに変更しています。

フィールドはデフォルトでインデックス付けされます([]byteを除く)。
しかしnoindexタグを付けたフィールドについてはインデックス付けが行われません。
フィールドA, C, Jの3つで指定されています。

フィールドDでは何の指定もされておらず、フィールドEと同様の意味になります。

特定のフィールドをデータストアに格納しないようにするには、ハイフン("-")をタグ付けします。
フィールドIで指定されています。

フィールドJはデータストアタグの他にjsonタグも持っています。
Go言語では構造体に文字列リテラルタグを持つことが出来ます。
詳細はThe Go Programming Language Specification - The Go Programming Language #Struct typesを御覧ください。


今回はタグ付け機能についてでした。
次回は構造化プロパティについて取り上げる予定です。