Python の App Engine では、Expando モデルを使用すると、事前宣言なしで動的プロパティをエンティティに割り当てることができます。この機能を Go でどのように複製できますか?
Go で動的プロパティを実現するための鍵は、PropertyLoadSaver インターフェイスです。これにより、エンティティは保存前にプロパティを動的に構築できるようになります。
幸いなことに、AppEngine プラットフォームは、PropertyLoadSaver インターフェイスを実装する PropertyList タイプを提供します。 PropertyList を使用すると、動的プロパティをリストに追加するだけで簡単に追加できます。
例を詳しく見てみましょう:
import ( "context" "time" datastore "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@domain.com"}, } k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &props) if err != nil { // Handle the error } // ... }
このコードは、「time」と「time」という 2 つの動的プロパティを持つ「DynEntity」という名前のエンティティを作成します。 "email."
動的エンティティをより詳細に制御する必要がある場合は、カスタム タイプに PropertyLoadSaver インターフェイスを実装できます。たとえば、マップをラップするカスタム DynEnt タイプを定義してみましょう:
type DynEnt map[string]interface{} func (d *DynEnt) Load(props []datastore.Property) error { // ... Your implementation } func (d *DynEnt) Save() (props []datastore.Property, err error) { // ... Your implementation }
これで、DynEnt を次のように使用できるようになります:
import ( "context" "time" datastore "google.golang.org/appengine/datastore" ) func main() { ctx := context.Background() d := DynEnt{"email": "example@domain.com", "time": time.Now()} k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &d) if err != nil { // Handle the error } // ... }
以上がGo の Google App Engine データストアに動的プロパティを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。