From c4fd3f6ff60189ba18446d538523b646f37f930b Mon Sep 17 00:00:00 2001 From: Ferenc Szabo Date: Thu, 25 Jun 2020 11:12:50 +0200 Subject: [PATCH] doc: add note about missing lock in sample code The sample code in 'Interfaces and methods' section contains a data race. Handlers are served concurrently. The handler does write and read operations; `go test -race` would fail (with concurrent requests). Since the doc is frozen and the code remains less cluttered without locks/atomic, don't change the sample code. Change-Id: I654b324d2f0b7f48497822751907c7d39e2f0e3d Reviewed-on: https://go-review.googlesource.com/c/go/+/239877 Reviewed-by: Rob Pike --- doc/effective_go.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/effective_go.html b/doc/effective_go.html index 9be6bc7cb0..7620402984 100644 --- a/doc/effective_go.html +++ b/doc/effective_go.html @@ -2336,10 +2336,9 @@ of the request from the client.

For brevity, let's ignore POSTs and assume HTTP requests are always -GETs; that simplification does not affect the way the handlers are -set up. Here's a trivial but complete implementation of a handler to -count the number of times the -page is visited. +GETs; that simplification does not affect the way the handlers are set up. +Here's a trivial implementation of a handler to count the number of times +the page is visited.

 // Simple counter server.
@@ -2355,6 +2354,11 @@ func (ctr *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 

(Keeping with our theme, note how Fprintf can print to an http.ResponseWriter.) +In a real server, access to ctr.n would need protection from +concurrent access. +See the sync and atomic packages for suggestions. +

+

For reference, here's how to attach such a server to a node on the URL tree.