smrcptr
v1.4.1
Mischen Sie keine Empfängertypen. Wählen Sie entweder Zeiger oder Strukturtypen für alle verfügbaren Methoden.
Go hat Regeln, wie es automatisch entweder Wert- oder Methodenempfänger auswählt, was komplex ist und zu Fehler führen kann. Daher handelt es sich um eine gemeinsame Empfehlung von Stil 1 2 .
go install github.com/nikolaydubina/smrcptr@latest type Pancake struct {}
func NewPancake () Pancake { return Pancake {} }
func ( s * Pancake ) Fry () {}
func ( s Pancake ) Bake () {}$ smrcptr ./...
/pancake.go:12:1: Pancake.Fry uses pointer
/pancake.go:10:1: Pancake.NewPancake uses value
/pancake.go:14:1: Pancake.Bake uses value Ab 2022-11-30 erkennt es nicht, dass die Empfänger der Zeiger- und Wertmethoden gemischt sind. Der relevanteste Analysator ST1016 prüft nur den Namen des Methodenempfängers.
$ staticcheck -checks ST1016 ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x " v " , 2x " s " ) (ST1016)Die Verwendung aller Analysatoren erkennt es auch nicht.
staticcheck -checks all ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x " v " , 2x " s " ) (ST1016)Go Wiki https://github.com/golang/go/wiki/codereviewComments#receiver-type ↩
Google Go Style Guide https://google.github.io/styleguide/go/decision#receiver-type ↩