smrcptr
v1.4.1
Не смешивайте типы приемников. Выберите указатели или типы структуры для всех доступных методов.
У GO есть правила о том, как он автоматически выбирает либо приемники значения, либо метода, что является сложным и может привести к ошибкам. Следовательно, это рекомендация общего стиля 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 По состоянию на 2022-11-30 он не обнаруживает, что приемники метода указателя и значения смешаны. Наиболее соответствующий анализатор ST1016 проверяет только имя приемника метода.
$ staticcheck -checks ST1016 ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x " v " , 2x " s " ) (ST1016)Использование всех анализаторов тоже не обнаруживает его.
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/decisions#receiver-type ↩