ホームページ > バックエンド開発 > Golang > Go 構造体で Null 許容日時列を効率的に処理するにはどうすればよいですか?

Go 構造体で Null 許容日時列を効率的に処理するにはどうすればよいですか?

DDD
リリース: 2024-12-19 19:00:21
オリジナル
835 人が閲覧しました

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
}
ログイン後にコピー

データベース レコードをスキャンする場合、Valid フィールドは Time が有効な日時値を持つか null であるかを示します。

使用法

データベース行をスキャンしてReminder struct:

row := db.QueryRow("...")
err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)
ログイン後にコピー

RemindAt フィールドにアクセスするには、Valid フィールドを確認してください:

if reminder.RemindedAt.Valid {
    // RemindedAt has a valid datetime value
} else {
    // RemindedAt is null
}
ログイン後にコピー

このアプローチにより、Go 構造体での null 許容日時列の処理が簡素化され、手動での操作の必要がなくなります。 null チェックを実装します。

以上がGo 構造体で Null 許容日時列を効率的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート