Go에서 MongoDB에 액세스할 때 다음과 같이 저장된 날짜를 처리하는 등 데이터 유형을 변환해야 하는 상황이 발생할 수 있습니다. MongoDB의 문자열이지만 Go time.Time 객체로 필요합니다. 이 문제를 해결하는 방법은 다음과 같습니다.
MongoDB와 Go 간의 마샬링/비마샬링 중 유형 변환을 처리하려면 bson.Getter 및 bson.Setter 인터페이스를 사용하여 사용자 정의 논리를 구현하세요.
먼저 확장 time.Time 유형의 추가 필드 EndDate가 있는 clientConfigData:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
SetBSON() 및 GetBSON()에서 사용자 정의 마샬링/비마샬 논리 구현 메서드:
const endDateLayout = "2006-01-02 15:04:05" func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) { type my clientConfigData if err = raw.Unmarshal((*my)(c)); err != nil { return } c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr) return } func (c *clientConfigData) GetBSON() (interface{}, error) { c.EndDateStr = c.EndDate.Format(endDateLayout) type my *clientConfigData return my(c), nil }
스택 오버플로를 방지하려면 두 메서드 내에서 새로운 중간 my 유형을 생성하여 끝없는 재귀 없이 변환을 허용합니다.
이 사용자 정의 마샬링은 그리고 언마샬링 로직을 사용하면 문자열과 시간 사이의 날짜를 변환할 수 있습니다. Go에서 MongoDB에 액세스할 때 시간 형식을 사용합니다.
위 내용은 Go에서 MongoDB에 액세스할 때 날짜 변환을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!