Go App Engine データストアの動的プロパティ
Python の App Engine とは異なり、Go はすぐに使えるメカニズムを提供しません動的プロパティを持つエンティティを作成する場合、実行時に属性を割り当てることができます。ただし、PropertyLoadSaver インターフェイスを使用すると、同様の機能を実装できます。
動的プロパティに PropertyList を使用する
Go の App Engine プラットフォームは、PropertyList タイプを提供します。 PropertyLoadSaver インターフェイスを使用すると、保存時にプロパティを動的に構築できます。次の例を考えてみましょう。
package main import ( "context" "time" "google.golang.org/appengine/datastore" ) func main() { ctx := context.Background() props := datastore.PropertyList{ datastore.Property{Name: "time", Value: time.Now()}, datastore.Property{Name: "email", Value: "example@example.com"}, } k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &props) if err != nil { // Handle error } // ... }
この例では、「time」と「email」という 2 つの動的プロパティを持つ「DynEntity」という名前のエンティティを作成します。
動的プロパティのカスタム タイプ
場合によっては、PropertyLoadSaver を実装する方が望ましい場合があります。 PropertyList を使用するのではなく、カスタム タイプのインターフェイスを使用します。たとえば、マップ タイプに実装できます:
package main import ( "context" "google.golang.org/appengine/datastore" ) type DynEnt map[string]interface{} func (d *DynEnt) Load(props []datastore.Property) error { for _, p := range props { (*d)[p.Name] = p.Value } return nil } func (d *DynEnt) Save() ([]datastore.Property, error) { var props []datastore.Property for k, v := range *d { props = append(props, datastore.Property{Name: k, Value: v}) } return props, nil } func main() { ctx := context.Background() d := DynEnt{"email": "example@example.com", "time": time.Now()} k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &d) if err != nil { // Handle error } // ... }
このカスタム タイプでは、Go の他のマップと同様に動的プロパティを使用できますが、データストアに保存したり、データストアから取得したりできます。
d["active"] = true datastore.Put(ctx, key, &d)
以上がGo App Engine データストアに動的プロパティを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。