Linter go yang menegakkan tag lapangan di (un) marshaled struct.
musttag memeriksa bahwa bidang yang diekspor dari struct yang diteruskan ke fungsi seperti Marshal dianotasi dengan tag yang relevan:
// BAD:
var user struct {
Name string
}
data , err := json . Marshal ( user )
// GOOD:
var user struct {
Name string `json:"name"`
}
data , err := json . Marshal ( user )The Rational dari Uber Style Guide:
Bentuk serial struktur adalah kontrak antara sistem yang berbeda. Perubahan pada struktur bentuk serial, termasuk nama lapangan, mematahkan kontrak ini. Menentukan nama lapangan di dalam tag membuat kontrak eksplisit, dan penjaga menentang secara tidak sengaja melanggar kontrak dengan refactoring atau mengganti nama bidang.
Paket -paket berikut didukung di luar kotak:
Selain itu, paket khusus dapat ditambahkan ke daftar.
musttag diintegrasikan ke dalam golangci-lint , dan ini adalah cara yang disarankan untuk menggunakannya.
Untuk mengaktifkan linter, tambahkan baris berikut ke .golangci.yml :
linters :
enable :
- musttag Atau, Anda dapat mengunduh biner prebuilt dari halaman rilis untuk menggunakan musttag mandiri.
Jalankan golangci-lint dengan musttag diaktifkan. Lihat daftar opsi yang tersedia untuk mengonfigurasi linter.
Saat menggunakan musttag Standalone, lulus opsi sebagai bendera.
Untuk melaporkan fungsi khusus, Anda perlu menambahkan deskripsinya ke .golangci.yml . Berikut ini adalah contoh menambahkan dukungan untuk 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 Hal yang sama dapat dilakukan melalui -fn=<name:tag:arg-pos> bendera saat menggunakan musttag mandiri:
musttag -fn= " github.com/hashicorp/hcl/v2/hclsimple.DecodeFile:hcl:2 " ./...