From a34c967eaf2e1bda05eadc5c1af59fe8060ca0dc Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Thu, 5 Sep 2019 13:30:16 -0700 Subject: [PATCH] Clarify use of buffered channel in the timeouts example. The buffered channel prevents goroutine leaks in case the channel doesn't end up being read (as indeed happens to c1). Updates #207 --- examples/timeouts/timeouts.go | 5 ++++- examples/timeouts/timeouts.hash | 4 ++-- public/timeouts | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/examples/timeouts/timeouts.go b/examples/timeouts/timeouts.go index ccc9ecb..ce1d1cd 100644 --- a/examples/timeouts/timeouts.go +++ b/examples/timeouts/timeouts.go @@ -12,7 +12,10 @@ func main() { // For our example, suppose we're executing an external // call that returns its result on a channel `c1` - // after 2s. + // after 2s. Note that the channel is buffered, so the + // send in the goroutine is nonblocking. This is a + // common pattern to prevent goroutine leaks in case the + // channel is never read. c1 := make(chan string, 1) go func() { time.Sleep(2 * time.Second) diff --git a/examples/timeouts/timeouts.hash b/examples/timeouts/timeouts.hash index 64d1c5a..f510bfa 100644 --- a/examples/timeouts/timeouts.hash +++ b/examples/timeouts/timeouts.hash @@ -1,2 +1,2 @@ -93343e1aacb14f818c87732914c29ba57afab245 -MgcfA-xpJO9 +b1e8d0efbabd0c52271a85fad5ad58dcd1c7c476 +gyY_qDsRVUe diff --git a/public/timeouts b/public/timeouts index c00732d..532dbc0 100644 --- a/public/timeouts +++ b/public/timeouts @@ -44,7 +44,7 @@ elegant thanks to channels and select.

- +
package main
 
@@ -80,7 +80,10 @@ elegant thanks to channels and select.

For our example, suppose we’re executing an external call that returns its result on a channel c1 -after 2s.

+after 2s. Note that the channel is buffered, so the +send in the goroutine is nonblocking. This is a +common pattern to prevent goroutine leaks in case the +channel is never read.