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"이라는 두 개의 동적 속성을 사용하여 "DynEntity"라는 엔터티를 생성합니다.
동적 속성에 대한 사용자 정의 유형
어떤 경우에는 PropertyList를 사용하는 것보다 사용자 정의 유형에 PropertyLoadSaver 인터페이스를 구현하는 것이 더 나을 수도 있습니다. 예를 들어 지도 유형에서 구현할 수 있습니다.
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 Datastore에서 동적 속성을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!