Maison  >  Article  >  développement back-end  >  Comment puis-je mapper le type bit(1) de MySQL à un type Go à l'aide de l'ORM de Beego ?

Comment puis-je mapper le type bit(1) de MySQL à un type Go à l'aide de l'ORM de Beego ?

DDD
DDDoriginal
2024-11-17 04:14:03399parcourir

How can I map MySQL's bit(1) type to a Go type using Beego's ORM?

Type de bits de MySQL : une correspondance parfaite avec le bool personnalisé de Go

Question :
Dans une table de base de données avec une colonne de type bit(1), comment puis-je la mapper à un type Go à l'aide de l'ORM de Beego ?

Réponse :

Puisque Go n'a pas de colonne de type build -dans le type pour bit(1), l'approche recommandée consiste à créer un type bool personnalisé.

Bool personnalisé pour Bit(1) de MySQL
Pour résoudre ce problème, un type personnalisé Un type booléen peut être créé pour gérer la colonne bit(1).

type BitBool bool

// Value converts BitBool to 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 converts the incoming bitfield 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
}

Utilisation dans Go Struct
Pour utiliser le type BitBool personnalisé dans une structure Go, déclarez-le simplement comme type pour le champ correspondant :

type BaseModel struct {
    Id          string           `orm:"pk";form:"id"`
    CreatedTime time.Time        `orm:"auto_now_add;type(datetime)";form:"-"`
    UpdatedTime time.Time        `orm:"auto_now;type(datetime)";form:"-"`
    Deleted     BitBool  `form:"-"`
}

En utilisant un type BitBool personnalisé, vous pouvez mapper le type bit(1) de MySQL à un type Go qui gère la manipulation des bits de manière appropriée, en évitant les erreurs qui surviennent en utilisant le type booléen par défaut.

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