>백엔드 개발 >Golang >Go 구조체에서 Null 허용 날짜/시간 열을 효율적으로 처리하려면 어떻게 해야 합니까?

Go 구조체에서 Null 허용 날짜/시간 열을 효율적으로 처리하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-19 19:00:21807검색

How Can I Efficiently Handle Nullable Datetime Columns in Go Structs?

Go 구조체의 날짜/시간 처리

Go에서 데이터베이스 레코드로 구조체를 채울 때 null 허용 날짜/시간 열의 처리는 도전. 다음 구조체를 고려하세요.

type Reminder struct {
    Id         int
    CreatedAt  time.Time
    RemindedAt *time.Time
    SenderId   int
    ReceiverId int
}

이 예에서 RemindAt는 null 허용 값을 처리하기 위한 포인터로 표시됩니다. 그러나 이 접근 방식에서는 코드에서 null이 아닌 값과 null 값을 구별해야 하므로 번거로울 수 있습니다.

향상된 솔루션

이 문제를 해결하려면 Go pq.NullTime 또는 sql.NullTime(Go 1.13) 유형을 제공합니다. 접근 방식:

type Reminder struct {
    Id         int
    CreatedAt  time.Time
    RemindedAt pq.NullTime // or sql.NullTime
    SenderId   int
    ReceiverId int
}

NullTime은 다음 필드를 정의합니다.

type NullTime struct {
    Time  time.Time
    Valid bool // Valid is true if Time is not NULL
}

데이터베이스 레코드를 스캔할 때 유효 필드는 시간에 유효한 날짜/시간 값이 있는지 또는 null인지 여부를 나타냅니다.

사용

데이터베이스 행을 미리 알림으로 스캔하려면 구조체:

row := db.QueryRow("...")
err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)

RemindAt 필드에 액세스하려면 유효한 필드를 확인하세요.

if reminder.RemindedAt.Valid {
    // RemindedAt has a valid datetime value
} else {
    // RemindedAt is null
}

이 접근 방식을 사용하면 Go 구조체에서 null 허용 날짜/시간 열 처리가 단순화되어 수동으로 구현할 필요가 없습니다. null 검사.

위 내용은 Go 구조체에서 Null 허용 날짜/시간 열을 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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