Maison > développement back-end > Golang > le corps du texte

Comment dois-je mapper le type « bit(1) » de MySQL à un type Go ?

Susan Sarandon
Libérer: 2024-11-23 06:41:16
original
825 Les gens l'ont consulté

How should I map MySQL's `bit(1)` type to a Go type?

Comment mapper le type de bit de MySQL au type de Go

Dans MySQL, le type de données bit(1) est utilisé pour stocker les valeurs booléennes. Lors de la migration vers Go, les développeurs sont souvent confrontés au défi de déterminer le type Go approprié auquel le mapper.

Question :
Dans l'exemple fourni, la table MySQL contient une colonne nommée supprimé de type bit(1). Quel type Go doit être utilisé pour représenter cette colonne dans une structure Go ?

Réponse :
L'approche recommandée consiste à utiliser un type de données personnalisé, tel que fourni par la bibliothèque sqlx. sqlx définit un type appelé BitBool qui gère spécifiquement les valeurs BIT(1) :

// BitBool is an implementation of a bool for the MySQL type BIT(1).
// This type allows you to avoid wasting an entire byte for MySQL's boolean type TINYINT.
type BitBool bool
Copier après la connexion

BitBool implémente les interfaces nécessaires pour convertir entre le type bool de Go et le type BIT(1) de MySQL :

// Value implements the driver.Valuer interface,
// and turns the BitBool into a bitfield (BIT(1)) for MySQL storage.
func (b BitBool) Value() (driver.Value, error) {
    if b {
        return []byte{1}, nil
    } else {
        return []byte{0}, nil
    }
}

// Scan implements the sql.Scanner interface,
// and turns the bitfield incoming from MySQL into a BitBool
func (b *BitBool) Scan(src interface{}) error {
    v, ok := src.([]byte)
    if !ok {
        return errors.New("bad []byte type assertion")
    }
    *b = v[0] == 1
    return nil
}
Copier après la connexion

Dans la structure Go fournie, Supprimé doit être déclaré comme :

Deleted     BitBool `form:"-"`
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal