Go에서 MongoDB에 액세스할 때 날짜 변환을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-23 11:00:56
원래의
456명이 탐색했습니다.

How to Handle Date Conversions When Accessing MongoDB from Go?

Go에서 MongoDB 액세스: 날짜 작업

Go에서 MongoDB에 액세스할 때 다음과 같이 저장된 날짜를 처리하는 등 데이터 유형을 변환해야 하는 상황이 발생할 수 있습니다. MongoDB의 문자열이지만 Go time.Time 객체로 필요합니다. 이 문제를 해결하는 방법은 다음과 같습니다.

사용자 정의 마샬링/비정렬 논리

MongoDB와 Go 간의 마샬링/비마샬링 중 유형 변환을 처리하려면 bson.Getter 및 bson.Setter 인터페이스를 사용하여 사용자 정의 논리를 구현하세요.

clientConfigData 사용자 정의

먼저 확장 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
}
로그인 후 복사

설명

  • SetBSON(): EndDateStr 필드를 구문 분석하고 EndDate 필드를 time.Time으로 설정합니다.
  • GetBSON(): 변환 EndDate를 지정된 형식의 문자열로 이전

스택 오버플로 방지

스택 오버플로를 방지하려면 두 메서드 내에서 새로운 중간 my 유형을 생성하여 끝없는 재귀 없이 변환을 허용합니다.

이 사용자 정의 마샬링은 그리고 언마샬링 로직을 사용하면 문자열과 시간 사이의 날짜를 변환할 수 있습니다. Go에서 MongoDB에 액세스할 때 시간 형식을 사용합니다.

위 내용은 Go에서 MongoDB에 액세스할 때 날짜 변환을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿