Un go linter qui applique des étiquettes de champ dans des structures marécatrices (non).
Les vérifications musttag que les champs exportés d'une structure transmis à une fonction de type Marshal sont annotés avec l'étiquette pertinente:
// BAD:
var user struct {
Name string
}
data , err := json . Marshal ( user )
// GOOD:
var user struct {
Name string `json:"name"`
}
data , err := json . Marshal ( user )Le Guide rationnel de style Uber:
La forme sérialisée de la structure est un contrat entre différents systèmes. Les modifications de la structure du formulaire sérialisé, y compris les noms de champ, rompent ce contrat. La spécification des noms de champs à l'intérieur des balises rend le contrat explicite, et il protège contre accidentellement le contrat en refactoring ou en renommant les champs.
Les packages suivants sont pris en charge hors de la boîte:
De plus, tout package personnalisé peut être ajouté à la liste.
musttag est intégré à golangci-lint , et c'est le moyen recommandé de l'utiliser.
Pour activer le linter, ajoutez les lignes suivantes à .golangci.yml :
linters :
enable :
- musttag Alternativement, vous pouvez télécharger un binaire prédéfini à partir de la page des versions pour utiliser musttag Standalone.
Exécutez golangci-lint avec musttag activé. Voir la liste des options disponibles pour configurer le linter.
Lorsque vous utilisez musttag Standalone, passez les options sous forme de drapeaux.
Pour signaler une fonction personnalisée, vous devez ajouter sa description à .golangci.yml . Ce qui suit est un exemple d'ajout de prise en charge de hclsimple.Decode :
linters-settings :
musttag :
functions :
# The full name of the function, including the package.
- name : github.com/hashicorp/hcl/v2/hclsimple.Decode
# The struct tag whose presence should be ensured.
tag : hcl
# The position of the argument to check.
arg-pos : 2 Le même peut être fait via le -fn=<name:tag:arg-pos> drapeau lors de l'utilisation musttag standalone:
musttag -fn= " github.com/hashicorp/hcl/v2/hclsimple.DecodeFile:hcl:2 " ./...