5
votes

Création d'un type de données personnalisé GORM, comment obtenir du contexte dans l'analyse?

J'essaie d'écrire un type de données personnalisé Gorm: https://gorm.io/docs/data_types.html

type MyDataType struct {}

func (f *MyDataType) Scan(value interface{}) error {
    //
}

func (f MyDataType) Value() (driver.Value, error) {
    //
}

Pour certaines raisons, j'ai besoin d'accéder au contexte dans Scan ou de pouvoir récupérer les balises de champ.

Y a-t-il un moyen de faire cela ? Merci


0 commentaires

3 Réponses :


1
votes

La valeur est basée sur l'espace utilisateur dont vous devrez peut-être changer le code pour qu'il ressemble à:

type MyDataType struct {}

func (f *MyDataType) Scan(context context.Context, value interface{}) error {
    // proceed the context right there
}

func (f MyDataType) Value() (driver.Value, error) {
    //
}


0 commentaires

0
votes

À quel contexte avez-vous besoin pour accéder?

Scan (...) est utilisé pour traduire les données brutes de la base de données dans votre type de champ personnalisé. Vous devez connaître le format.

Value () est l'inverse, il convertit votre champ personnalisé en ce qui doit être placé dans la base de données.


0 commentaires

0
votes

Vous ne pouvez pas modifier les paramètres de func Scan ou func Value car essayer de le faire interrompra l' MyDataType de sql.Scanner et sql.Valuer .

Il peut être fait en intégrant context.Context à l' intérieur MyDataType .

type MyDataType struct {
    context.Context
}

func (f *MyDataType) Scan(value interface{}) error {
    ctx := context.Background()
    ctx = context.WithValue(ctx, "key", value)
    f.Context = ctx
    return nil
}

func (f MyDataType) Value() (driver.Value, error) {
    value := f.Context.Value("key")
    return value, nil
}


0 commentaires