smrcptr
v1.4.1
Não misture os tipos de receptor. Escolha ponteiros ou tipos de estrutura para todos os métodos disponíveis.
O Go tem regras sobre como ele seleciona automaticamente os receptores de valor ou método, que são complexos e podem levar a bugs. Portanto, é uma recomendação de estilo comum 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 A partir de 2022-11-30 , ele não detecta que os receptores de método de ponteiro e valor são misturados. O analisador mais relevante ST1016 verifica apenas o nome do receptor do método.
$ staticcheck -checks ST1016 ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x " v " , 2x " s " ) (ST1016)O uso de todos os analisadores também não o detecta.
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 ↩
Guia de estilo Google Go Style https://google.github.io/styleguide/go/decisions#receiver-type ↩