Un enlace GO que aplica etiquetas de campo en estructuras (no) mariscales.
Las verificaciones musttag que los campos exportados de una estructura pasados a una función similar a un Marshal se anotan con la etiqueta relevante:
// BAD:
var user struct {
Name string
}
data , err := json . Marshal ( user )
// GOOD:
var user struct {
Name string `json:"name"`
}
data , err := json . Marshal ( user )La guía racional de Uber Style:
La forma serializada de la estructura es un contrato entre diferentes sistemas. Los cambios en la estructura de la forma serializada, incluidos los nombres de campo, rompen este contrato. La especificación de nombres de campo dentro de las etiquetas hace que el contrato sea explícito, y protege contra romper accidentalmente el contrato refactorizando o cambiando el nombre de los campos.
Los siguientes paquetes son compatibles con la caja:
Además, se puede agregar cualquier paquete personalizado a la lista.
musttag está integrado en golangci-lint , y esta es la forma recomendada de usarlo.
Para habilitar el enlace, agregue las siguientes líneas a .golangci.yml :
linters :
enable :
- musttag Alternativamente, puede descargar un binario prebuilado de la página de versiones para usar musttag Standalone.
Ejecute golangci-lint con musttag habilitado. Consulte la lista de opciones disponibles para configurar el enlace.
Cuando use musttag Standalone, pase las opciones como banderas.
Para informar una función personalizada, debe agregar su descripción a .golangci.yml . El siguiente es un ejemplo de agregar soporte para 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 Lo mismo se puede hacer a través de -fn=<name:tag:arg-pos> flag cuando se usa musttag standalone:
musttag -fn= " github.com/hashicorp/hcl/v2/hclsimple.DecodeFile:hcl:2 " ./...