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"이라는 두 가지 동적 속성을 사용하여 "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 Datastore에서 동적 속성을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!