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!