>백엔드 개발 >Golang >MongoDB를 삽입하기 전에 Go 구조체의 'created_at' 및 'updated_at' 필드를 자동으로 채우는 방법은 무엇입니까?

MongoDB를 삽입하기 전에 Go 구조체의 'created_at' 및 'updated_at' 필드를 자동으로 채우는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-24 19:08:11186검색
How to Automatically Populate `created_at` and `updated_at` Fields in Go Structs Before MongoDB Insertion?
Custom Marshaler

MongoDB 서버는 기본적으로 Created_at 및 자동 채우기를 지원하지 않습니다. update_at 필드. 그러나 사용자 정의 마샬러를 생성하여 이 기능을 구현할 수 있습니다.

bson.Marshaler 구현

사용자 유형에 맞게 bson.Marshaler 인터페이스를 구현하세요. 이를 통해 구조체가 데이터베이스에 삽입되기 전에 BSON으로 마샬링되는 방법을 사용자 지정할 수 있습니다.

사용자 지정 마샬러의 MarshalBSON 메서드는 다음 단계를 수행해야 합니다.

CreatedAt인 경우 0이면 현재 시간으로 설정합니다.

UpdateAt를 현재 시간으로 설정합니다. time.

기본 bson.Marshal 함수를 사용하여 구조체를 BSON으로 마샬링합니다.
  1. 다음은 사용자 정의 마샬러의 예입니다.
  2. 사용법
사용자 정의 마샬러를 사용하려면 User 구조체를 삽입할 때마다 이를 사용해야 한다는 점을 기억하세요. InsertOne 메서드를 사용하여 데이터베이스를 만듭니다. 사용자 구조체에 대한 포인터를 인수로 전달해야 합니다.

예:
func (user *User) MarshalBSON() ([]byte, error) {
    if user.CreatedAt.IsZero() {
        user.CreatedAt = time.Now()
    }
    user.UpdatedAt = time.Now()

    type my User
    return bson.Marshal((*my)(user))
}

사용자 지정 마샬러를 더 큰 구조체에 포함하면 작동하지 않습니다. 이 문제를 방지하려면 대신 전체 임베디드 구조체에 대해 사용자 정의 마샬러를 사용할 수 있습니다.

위 내용은 MongoDB를 삽입하기 전에 Go 구조체의 'created_at' 및 'updated_at' 필드를 자동으로 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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