Maison  >  Article  >  développement back-end  >  Comment dois-je mapper le type « bit(1) » de MySQL à un type Go ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 06:41:16821parcourir

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

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
}

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

Deleted     BitBool `form:"-"`

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