Gestion datetime dans les structures Go
Dans Go, lors du remplissage d'une structure avec un enregistrement de base de données, la gestion des colonnes datetime nullables peut devenir un problème défi. Considérez la structure suivante :
type Reminder struct { Id int CreatedAt time.Time RemindedAt *time.Time SenderId int ReceiverId int }
Dans cet exemple, RemendedAt est représenté comme un pointeur pour gérer les valeurs nullables. Cependant, cette approche introduit la nécessité de faire la distinction entre les valeurs non nulles et nulles dans le code, ce qui peut s'avérer fastidieux.
Solution améliorée
Pour résoudre ce problème, allez propose les types pq.NullTime ou sql.NullTime (dans Go 1.13), qui offrent une interface plus élégante. approche :
type Reminder struct { Id int CreatedAt time.Time RemindedAt pq.NullTime // or sql.NullTime SenderId int ReceiverId int }
NullTime définit les champs suivants :
type NullTime struct { Time time.Time Valid bool // Valid is true if Time is not NULL }
Lors de l'analyse d'un enregistrement de base de données, le champ Valide indique si Time a une valeur datetime valide ou est nulle.
Utilisation
Pour numériser une ligne de base de données dans un rappel struct :
row := db.QueryRow("...") err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)
Pour accéder au champ RemendedAt, vérifiez le champ Valid :
if reminder.RemindedAt.Valid { // RemindedAt has a valid datetime value } else { // RemindedAt is null }
Cette approche simplifie la gestion des colonnes datetime nullables dans les structures Go, éliminant ainsi le besoin d'implémenter manuellement vérification nulle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!