Go에서 사용자 정의 BSON 마샬링 처리
MongoDB의 맥락에서 사용자 정의 데이터 구조를 다룰 때 사용자 정의 마샬링과 BSON 형식의 데이터를 올바르게 표현하고 처리하기 위한 논리를 언마샬링합니다. 이와 관련하여 Go는 특정 데이터 유형의 사용자 정의 마샬링 및 역마샬링을 허용하는 bson.Getter 및 bson.Setter와 같은 인터페이스를 제공합니다.
통화 구조체가 사용자 정의 MarshalJSON 및 UnmarshalJSON과 함께 정의되는 다음 예를 고려해보세요. JSON 인코딩 및 디코딩을 처리하는 방법:
type Currency struct { value decimal.Decimal //The actual value of the currency. currencyCode string //The ISO currency code. } // MarshalJSON implements json.Marshaller. func (c Currency) MarshalJSON() ([]byte, error) { f, _ := c.Value().Float64() return json.Marshal(struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }{ Value: f, CurrencyCode: c.CurrencyCode(), }) } // UnmarshalJSON implements json.Unmarshaller. func (c *Currency) UnmarshalJSON(b []byte) error { decoded := new(struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }) jsonErr := json.Unmarshal(b, decoded) if jsonErr == nil { c.value = decimal.NewFromFloat(decoded.Value) c.currencyCode = decoded.CurrencyCode return nil } else { return jsonErr } }
사용자 정의 BSON 마샬링을 달성하려면 유사한 접근 방식을 사용할 수 있습니다. 통화 구조체에서 bson.Getter 및 bson.Setter 인터페이스를 구현하여 사용할 수 있습니다.
// GetBSON implements bson.Getter. func (c Currency) GetBSON() (interface{}, error) { f := c.Value().Float64() return struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }{ Value: f, CurrencyCode: c.currencyCode, }, nil } // SetBSON implements bson.Setter. func (c *Currency) SetBSON(raw bson.Raw) error { decoded := new(struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }) bsonErr := raw.Unmarshal(decoded) if bsonErr == nil { c.value = decimal.NewFromFloat(decoded.Value) c.currencyCode = decoded.CurrencyCode return nil } else { return bsonErr } }
이러한 인터페이스를 구현함으로써 이제 통화 구조체는 해당 필드를 원하는 BSON 표현에 매핑하는 사용자 정의 BSON 마샬링 논리를 갖습니다. , MongoDB 컨텍스트에서 사용자 정의 데이터 유형을 효과적으로 처리합니다.
위 내용은 MongoDB용 Go에서 사용자 정의 BSON 마샬링을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!