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 サイトの他の関連記事を参照してください。