>백엔드 개발 >Golang >Go를 사용하여 Mongoose의 날짜 필드에 대한 기본 현재 타임스탬프를 어떻게 설정할 수 있습니까?

Go를 사용하여 Mongoose의 날짜 필드에 대한 기본 현재 타임스탬프를 어떻게 설정할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-25 10:10:47796검색

How Can I Set a Default Current Timestamp for a Date Field in Mongoose Using Go?

Mgo를 사용한 사용자 정의 날짜 기본값

Mongoose에서는 기본 Date.now 값을 사용하여 스키마를 정의할 수 있습니다. 하지만 Go에서는 필드에 기본값이 허용되지 않으므로 다른 접근 방식이 필요합니다.

생성자 함수

한 가지 해결 방법은 생성자와 같은 생성자를 만드는 것입니다. CreatedAt 필드를 현재 시간으로 설정하는 NewUser()와 같은 함수:

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}

그러나 이 메서드는 이 함수를 통해 새 인스턴스 생성을 강제하거나 인스턴스가 저장될 때 인스턴스에 타임스탬프를 표시하지 않습니다.

사용자 정의 마샬링

보다 강력한 솔루션은 다음을 통해 사용자 정의 마샬링 논리를 구현하는 것입니다. bson.Getter 인터페이스. 이렇게 하면 저장되기 전에 저장된 값을 수정할 수 있습니다.

type User struct {
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
}

func (u *User) GetBSON() (interface{}, error) {
    u.CreatedAt = time.Now()
    type my *User
    return my(u), nil
}

GetBSON() 메서드에서 CreatedAt 필드가 현재 시간으로 업데이트됩니다. 스택 오버플로를 방지하기 위해 my라는 새로운 유형이 도입되었습니다. 이 새로운 유형은 bson.Getter 구현을 상속하지 않으므로 재귀 루프가 중단됩니다.

CreatedAt 필드가 처음에 비어 있는 경우에만 설정되도록 추가 검사를 추가할 수 있습니다.

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}

위 내용은 Go를 사용하여 Mongoose의 날짜 필드에 대한 기본 현재 타임스탬프를 어떻게 설정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.