aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/raeperd/recvcheck/README.md
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-11-11 11:41:38 +0100
committerTaras Madan <tarasmadan@google.com>2024-11-11 11:10:48 +0000
commit27e76fae2ee2d84dc7db63af1d9ed7358ba35b7a (patch)
treeed19c0e35e272b3c4cc5a2f2c595e035b2428337 /vendor/github.com/raeperd/recvcheck/README.md
parent621e84e063b0e15b23e17780338627c509e1b9e8 (diff)
vendor: update
Diffstat (limited to 'vendor/github.com/raeperd/recvcheck/README.md')
-rw-r--r--vendor/github.com/raeperd/recvcheck/README.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/github.com/raeperd/recvcheck/README.md b/vendor/github.com/raeperd/recvcheck/README.md
new file mode 100644
index 000000000..db84fe38e
--- /dev/null
+++ b/vendor/github.com/raeperd/recvcheck/README.md
@@ -0,0 +1,52 @@
+# recvcheck
+[![.github/workflows/build.yaml](https://github.com/raeperd/recvcheck/actions/workflows/build.yaml/badge.svg)](https://github.com/raeperd/recvcheck/actions/workflows/build.yaml) [![Go Report Card](https://goreportcard.com/badge/github.com/raeperd/recvcheck)](https://goreportcard.com/report/github.com/raeperd/recvcheck) [![codecov](https://codecov.io/gh/raeperd/recvcheck/graph/badge.svg?token=fPYgEHlq1e)](https://codecov.io/gh/raeperd/recvcheck)
+Golang linter for check receiver type in method
+
+## Motivtation
+From [Go Wiki: Go Code Review Comments - The Go Programming Language](https://go.dev/wiki/CodeReviewComments#receiver-type)
+> Don’t mix receiver types. Choose either pointers or struct types for all available method
+
+Following code from [Dave Chenney](https://dave.cheney.net/2015/11/18/wednesday-pop-quiz-spot-the-race) causes data race. Could you find it?
+This linter does it for you.
+
+```go
+package main
+
+import (
+ "fmt"
+ "time"
+)
+
+type RPC struct {
+ result int
+ done chan struct{}
+}
+
+func (rpc *RPC) compute() {
+ time.Sleep(time.Second) // strenuous computation intensifies
+ rpc.result = 42
+ close(rpc.done)
+}
+
+func (RPC) version() int {
+ return 1 // never going to need to change this
+}
+
+func main() {
+ rpc := &RPC{done: make(chan struct{})}
+
+ go rpc.compute() // kick off computation in the background
+ version := rpc.version() // grab some other information while we're waiting
+ <-rpc.done // wait for computation to finish
+ result := rpc.result
+
+ fmt.Printf("RPC computation complete, result: %d, version: %d\n", result, version)
+}
+```
+
+## References
+- [Is there a way to detect following data race code using golangci-lint or other linter?? · golangci/golangci-lint · Discussion #5006](https://github.com/golangci/golangci-lint/discussions/5006)
+ - [Wednesday pop quiz: spot the race | Dave Cheney](https://dave.cheney.net/2015/11/18/wednesday-pop-quiz-spot-the-race)
+
+
+