Maison >développement back-end >Golang >Comment puis-je gérer efficacement les colonnes Datetime Nullables dans Go Structs ?

Comment puis-je gérer efficacement les colonnes Datetime Nullables dans Go Structs ?

DDD
DDDoriginal
2024-12-19 19:00:21812parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn