Ne mélangez pas les types de récepteurs. Choisissez des pointeurs ou des types de structure pour toutes les méthodes disponibles.
GO a des règles sur la façon dont il sélectionne automatiquement les récepteurs de valeur ou de méthode, qui est complexe et peut conduire à des bogues. Par conséquent, c'est une recommandation de style commun 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 Depuis 2022-11-30 , il ne détecte pas que les récepteurs de la méthode du pointeur et de la valeur sont mitigés. Le plus pertinent l'analyseur ST1016 ne vérifie que le nom du récepteur de méthode.
$ staticcheck -checks ST1016 ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x " v " , 2x " s " ) (ST1016)L'utilisation de tous les analyseurs ne le détecte pas non plus.
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 ↩
Guide Google Go Style https://google.github.io/styleguide/go/decisions#receiver-ype ↩