web-dev-qa-db-fra.com

Le littéral composite utilise des champs sans clé

Je travaille avec le nouveau pilote mongodb officiel pour golang. J'ai créé une requête complexe pour insérer les données dans mongo db, puis les trier en fonction d'une valeur d'élément. J'utilise un filtre dans lequel j'ai créé le type bson en utilisant: -

filter := bson.D{{"autorefid", "100"}}

Mais il affiche un avertissement disant:

primitive.E Le littéral composite utilise des champs sans clé

Les avertissements créent un gâchis dans mon code.

23
Himanshu

Les avertissements peuvent être arrêtés en définissant l'indicateur de vérification sur false.

$ go doc cmd/vet

Par défaut, toutes les vérifications sont effectuées. Si des indicateurs sont explicitement définis sur true, seuls ces tests sont exécutés. Inversement, si un indicateur est explicitement défini sur false, seuls ces tests sont désactivés. Ainsi -printf = true exécute la vérification printf, -printf = false exécute toutes les vérifications à l'exception de la vérification printf.

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.

Mais l'avertissement est dû au fait de ne pas fournir le nom des clés lors de la définition de la valeur dans primitive.E struct.

Définition des clés pour primitive.E struct supprimera les messages d'avertissement. Par exemple

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}

La primitive de package contient des types similaires aux primitives Go car les types BSON ne peuvent pas avoir de représentations de primitives Go directes.

type E struct {
    Key   string
    Value interface{}
}

E représente un élément BSON pour un D. Il est généralement utilisé à l'intérieur d'un D.

Pour plus d'informations jetez un oeil à primitive.E

36
Himanshu

Vous pouvez changer:

filter := bson.D{{"autorefid", "100"}}

à:

filter := bson.D{primitive.E{Key: "autorefid", Value: "100"}}
5
dbam