From 287decabfdadaff721f6be7d7efacea2413e9e43 Mon Sep 17 00:00:00 2001 From: Mark McGranaghan Date: Sun, 30 Sep 2012 20:32:44 -0700 Subject: [PATCH] nonblocking channel operations --- .../nonblocking-channel-operations.go | 35 +++++++++++++++++++ .../closing-channels.go | 0 src/{040-timers => 041-timers}/timers.go | 0 src/{040-timers => 041-timers}/tiners.sh | 0 src/{041-tickers => 042-tickers}/tickers.go | 0 src/{041-tickers => 042-tickers}/tickers.sh | 0 .../state-goroutine.go | 0 src/{043-sorting => 044-sorting}/sorting.go | 0 src/{043-sorting => 044-sorting}/sorting.sh | 0 .../sorting-by-functions.go | 0 .../sorting-by-functions.sh | 0 .../collection-functions.go | 0 .../string-functions.go | 0 .../string-formatting.go | 0 .../string-formatting.sh | 0 src/{048-regexs => 049-regexs}/regexs.go | 0 src/{048-regexs => 049-regexs}/regexs.sh | 0 src/{049-bytes => 050-bytes}/bytes.go | 0 src/{050-json => 051-json}/json.go | 0 src/{051-time => 052-time}/time.go | 0 src/{051-time => 052-time}/time.sh | 0 src/{052-epochs => 053-epochs}/epochs.go | 0 src/{052-epochs => 053-epochs}/epochs.sh | 0 .../elapsed-time.go | 0 .../random-numbers.go | 0 .../random-numbers.sh | 0 .../number-parsing.go | 0 .../number-parsing.sh | 0 src/{056-urls => 057-urls}/urls.go | 0 src/{056-urls => 057-urls}/urls.sh | 0 .../sha1-hashes.go | 0 .../sha1-hashes.sh | 0 .../base64-encoding.go | 0 .../reading-files.go | 0 .../writing-files.go | 0 .../line-filters.go | 0 .../line-filters.sh | 0 .../command-line-arguments.go | 0 .../command-line-arguments.sh | 0 .../command-line-flags.go | 0 .../environment-variables.go | 0 .../environment-variables.sh | 0 .../spawning-processes.go | 0 .../spawning-processes.sh | 0 .../execing-processes.go | 0 src/{067-signals => 068-signals}/signals.go | 0 src/{067-signals => 068-signals}/signals.sh | 0 src/{068-exit => 069-exit}/exit.go | 0 src/{068-exit => 069-exit}/exit.sh | 0 .../http-client.go | 0 .../https-client.go | 0 src/{071-redis => 072-redis}/redis.go | 0 src/{071-redis => 072-redis}/redis.sh | 0 .../postgres.go | 0 .../postgres.sh | 0 .../sending-email.go | 0 .../hello-web.go | 0 .../responses.go | 0 .../responses.sh | 0 .../request-routing.go | 0 .../request-routing.sh | 0 .../request-logging.go | 0 .../static-content.go | 0 .../static-content.sh | 0 .../basic-authentication.go | 0 .../canonical-hosts.go | 0 .../canonical-hosts.sh | 0 .../middleware.go | 0 .../graceful-shutdown.go | 0 .../graceful-shutdown.sh | 0 .../https-servers.go | 0 .../https-servers.sh | 0 tool/index.txt | 2 +- 73 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/039-nonblocking-channel-operations/nonblocking-channel-operations.go rename src/{039-closing-channels => 040-closing-channels}/closing-channels.go (100%) rename src/{040-timers => 041-timers}/timers.go (100%) rename src/{040-timers => 041-timers}/tiners.sh (100%) rename src/{041-tickers => 042-tickers}/tickers.go (100%) rename src/{041-tickers => 042-tickers}/tickers.sh (100%) rename src/{042-state-goroutine => 043-state-goroutine}/state-goroutine.go (100%) rename src/{043-sorting => 044-sorting}/sorting.go (100%) rename src/{043-sorting => 044-sorting}/sorting.sh (100%) rename src/{044-sorting-by-functions => 045-sorting-by-functions}/sorting-by-functions.go (100%) rename src/{044-sorting-by-functions => 045-sorting-by-functions}/sorting-by-functions.sh (100%) rename src/{045-collection-functions => 046-collection-functions}/collection-functions.go (100%) rename src/{046-string-functions => 047-string-functions}/string-functions.go (100%) rename src/{047-string-formatting => 048-string-formatting}/string-formatting.go (100%) rename src/{047-string-formatting => 048-string-formatting}/string-formatting.sh (100%) rename src/{048-regexs => 049-regexs}/regexs.go (100%) rename src/{048-regexs => 049-regexs}/regexs.sh (100%) rename src/{049-bytes => 050-bytes}/bytes.go (100%) rename src/{050-json => 051-json}/json.go (100%) rename src/{051-time => 052-time}/time.go (100%) rename src/{051-time => 052-time}/time.sh (100%) rename src/{052-epochs => 053-epochs}/epochs.go (100%) rename src/{052-epochs => 053-epochs}/epochs.sh (100%) rename src/{053-elapsed-time => 054-elapsed-time}/elapsed-time.go (100%) rename src/{054-random-numbers => 055-random-numbers}/random-numbers.go (100%) rename src/{054-random-numbers => 055-random-numbers}/random-numbers.sh (100%) rename src/{055-number-parsing => 056-number-parsing}/number-parsing.go (100%) rename src/{055-number-parsing => 056-number-parsing}/number-parsing.sh (100%) rename src/{056-urls => 057-urls}/urls.go (100%) rename src/{056-urls => 057-urls}/urls.sh (100%) rename src/{057-sha1-hashes => 058-sha1-hashes}/sha1-hashes.go (100%) rename src/{057-sha1-hashes => 058-sha1-hashes}/sha1-hashes.sh (100%) rename src/{058-base64-encoding => 059-base64-encoding}/base64-encoding.go (100%) rename src/{059-reading-files => 060-reading-files}/reading-files.go (100%) rename src/{060-writing-files => 061-writing-files}/writing-files.go (100%) rename src/{061-line-filters => 062-line-filters}/line-filters.go (100%) rename src/{061-line-filters => 062-line-filters}/line-filters.sh (100%) rename src/{062-command-line-arguments => 063-command-line-arguments}/command-line-arguments.go (100%) rename src/{062-command-line-arguments => 063-command-line-arguments}/command-line-arguments.sh (100%) rename src/{063-command-line-flags => 064-command-line-flags}/command-line-flags.go (100%) rename src/{064-environment-variables => 065-environment-variables}/environment-variables.go (100%) rename src/{064-environment-variables => 065-environment-variables}/environment-variables.sh (100%) rename src/{065-spawning-processes => 066-spawning-processes}/spawning-processes.go (100%) rename src/{065-spawning-processes => 066-spawning-processes}/spawning-processes.sh (100%) rename src/{066-execing-processes => 067-execing-processes}/execing-processes.go (100%) rename src/{067-signals => 068-signals}/signals.go (100%) rename src/{067-signals => 068-signals}/signals.sh (100%) rename src/{068-exit => 069-exit}/exit.go (100%) rename src/{068-exit => 069-exit}/exit.sh (100%) rename src/{069-http-client => 070-http-client}/http-client.go (100%) rename src/{070-https-client => 071-https-client}/https-client.go (100%) rename src/{071-redis => 072-redis}/redis.go (100%) rename src/{071-redis => 072-redis}/redis.sh (100%) rename src/{072-postgres => 073-postgres}/postgres.go (100%) rename src/{072-postgres => 073-postgres}/postgres.sh (100%) rename src/{073-sending-email => 074-sending-email}/sending-email.go (100%) rename src/{074-hello-web => 075-hello-web}/hello-web.go (100%) rename src/{075-responses => 076-responses}/responses.go (100%) rename src/{075-responses => 076-responses}/responses.sh (100%) rename src/{076-request-routing => 077-request-routing}/request-routing.go (100%) rename src/{076-request-routing => 077-request-routing}/request-routing.sh (100%) rename src/{077-request-logging => 078-request-logging}/request-logging.go (100%) rename src/{078-static-content => 079-static-content}/static-content.go (100%) rename src/{078-static-content => 079-static-content}/static-content.sh (100%) rename src/{079-basic-authentication => 080-basic-authentication}/basic-authentication.go (100%) rename src/{080-canonical-hosts => 081-canonical-hosts}/canonical-hosts.go (100%) rename src/{080-canonical-hosts => 081-canonical-hosts}/canonical-hosts.sh (100%) rename src/{081-middleware => 082-middleware}/middleware.go (100%) rename src/{082-graceful-shutdown => 083-graceful-shutdown}/graceful-shutdown.go (100%) rename src/{082-graceful-shutdown => 083-graceful-shutdown}/graceful-shutdown.sh (100%) rename src/{083-https-servers => 084-https-servers}/https-servers.go (100%) rename src/{083-https-servers => 084-https-servers}/https-servers.sh (100%) diff --git a/src/039-nonblocking-channel-operations/nonblocking-channel-operations.go b/src/039-nonblocking-channel-operations/nonblocking-channel-operations.go new file mode 100644 index 0000000..726e0f0 --- /dev/null +++ b/src/039-nonblocking-channel-operations/nonblocking-channel-operations.go @@ -0,0 +1,35 @@ +package main + +import "fmt" + +func main() { + messages := make(chan string) + signals := make(chan bool) + + // Non-blocking receive. + select { + case msg := <- messages: + fmt.Println("received message", msg) + default: + fmt.Println("no messages received") + } + + // Non-blocking send. + msg := "hi" + select { + case messages <- msg: + fmt.Println("sent message", msg) + default: + fmt.Println("no messages sent") + } + + // Non-blocking multi-way select. + select { + case msg := <- messages: + fmt.Println("received message", msg) + case sig := <- signals: + fmt.Println("received signal", sig) + default: + fmt.Println("no activity") + } +} diff --git a/src/039-closing-channels/closing-channels.go b/src/040-closing-channels/closing-channels.go similarity index 100% rename from src/039-closing-channels/closing-channels.go rename to src/040-closing-channels/closing-channels.go diff --git a/src/040-timers/timers.go b/src/041-timers/timers.go similarity index 100% rename from src/040-timers/timers.go rename to src/041-timers/timers.go diff --git a/src/040-timers/tiners.sh b/src/041-timers/tiners.sh similarity index 100% rename from src/040-timers/tiners.sh rename to src/041-timers/tiners.sh diff --git a/src/041-tickers/tickers.go b/src/042-tickers/tickers.go similarity index 100% rename from src/041-tickers/tickers.go rename to src/042-tickers/tickers.go diff --git a/src/041-tickers/tickers.sh b/src/042-tickers/tickers.sh similarity index 100% rename from src/041-tickers/tickers.sh rename to src/042-tickers/tickers.sh diff --git a/src/042-state-goroutine/state-goroutine.go b/src/043-state-goroutine/state-goroutine.go similarity index 100% rename from src/042-state-goroutine/state-goroutine.go rename to src/043-state-goroutine/state-goroutine.go diff --git a/src/043-sorting/sorting.go b/src/044-sorting/sorting.go similarity index 100% rename from src/043-sorting/sorting.go rename to src/044-sorting/sorting.go diff --git a/src/043-sorting/sorting.sh b/src/044-sorting/sorting.sh similarity index 100% rename from src/043-sorting/sorting.sh rename to src/044-sorting/sorting.sh diff --git a/src/044-sorting-by-functions/sorting-by-functions.go b/src/045-sorting-by-functions/sorting-by-functions.go similarity index 100% rename from src/044-sorting-by-functions/sorting-by-functions.go rename to src/045-sorting-by-functions/sorting-by-functions.go diff --git a/src/044-sorting-by-functions/sorting-by-functions.sh b/src/045-sorting-by-functions/sorting-by-functions.sh similarity index 100% rename from src/044-sorting-by-functions/sorting-by-functions.sh rename to src/045-sorting-by-functions/sorting-by-functions.sh diff --git a/src/045-collection-functions/collection-functions.go b/src/046-collection-functions/collection-functions.go similarity index 100% rename from src/045-collection-functions/collection-functions.go rename to src/046-collection-functions/collection-functions.go diff --git a/src/046-string-functions/string-functions.go b/src/047-string-functions/string-functions.go similarity index 100% rename from src/046-string-functions/string-functions.go rename to src/047-string-functions/string-functions.go diff --git a/src/047-string-formatting/string-formatting.go b/src/048-string-formatting/string-formatting.go similarity index 100% rename from src/047-string-formatting/string-formatting.go rename to src/048-string-formatting/string-formatting.go diff --git a/src/047-string-formatting/string-formatting.sh b/src/048-string-formatting/string-formatting.sh similarity index 100% rename from src/047-string-formatting/string-formatting.sh rename to src/048-string-formatting/string-formatting.sh diff --git a/src/048-regexs/regexs.go b/src/049-regexs/regexs.go similarity index 100% rename from src/048-regexs/regexs.go rename to src/049-regexs/regexs.go diff --git a/src/048-regexs/regexs.sh b/src/049-regexs/regexs.sh similarity index 100% rename from src/048-regexs/regexs.sh rename to src/049-regexs/regexs.sh diff --git a/src/049-bytes/bytes.go b/src/050-bytes/bytes.go similarity index 100% rename from src/049-bytes/bytes.go rename to src/050-bytes/bytes.go diff --git a/src/050-json/json.go b/src/051-json/json.go similarity index 100% rename from src/050-json/json.go rename to src/051-json/json.go diff --git a/src/051-time/time.go b/src/052-time/time.go similarity index 100% rename from src/051-time/time.go rename to src/052-time/time.go diff --git a/src/051-time/time.sh b/src/052-time/time.sh similarity index 100% rename from src/051-time/time.sh rename to src/052-time/time.sh diff --git a/src/052-epochs/epochs.go b/src/053-epochs/epochs.go similarity index 100% rename from src/052-epochs/epochs.go rename to src/053-epochs/epochs.go diff --git a/src/052-epochs/epochs.sh b/src/053-epochs/epochs.sh similarity index 100% rename from src/052-epochs/epochs.sh rename to src/053-epochs/epochs.sh diff --git a/src/053-elapsed-time/elapsed-time.go b/src/054-elapsed-time/elapsed-time.go similarity index 100% rename from src/053-elapsed-time/elapsed-time.go rename to src/054-elapsed-time/elapsed-time.go diff --git a/src/054-random-numbers/random-numbers.go b/src/055-random-numbers/random-numbers.go similarity index 100% rename from src/054-random-numbers/random-numbers.go rename to src/055-random-numbers/random-numbers.go diff --git a/src/054-random-numbers/random-numbers.sh b/src/055-random-numbers/random-numbers.sh similarity index 100% rename from src/054-random-numbers/random-numbers.sh rename to src/055-random-numbers/random-numbers.sh diff --git a/src/055-number-parsing/number-parsing.go b/src/056-number-parsing/number-parsing.go similarity index 100% rename from src/055-number-parsing/number-parsing.go rename to src/056-number-parsing/number-parsing.go diff --git a/src/055-number-parsing/number-parsing.sh b/src/056-number-parsing/number-parsing.sh similarity index 100% rename from src/055-number-parsing/number-parsing.sh rename to src/056-number-parsing/number-parsing.sh diff --git a/src/056-urls/urls.go b/src/057-urls/urls.go similarity index 100% rename from src/056-urls/urls.go rename to src/057-urls/urls.go diff --git a/src/056-urls/urls.sh b/src/057-urls/urls.sh similarity index 100% rename from src/056-urls/urls.sh rename to src/057-urls/urls.sh diff --git a/src/057-sha1-hashes/sha1-hashes.go b/src/058-sha1-hashes/sha1-hashes.go similarity index 100% rename from src/057-sha1-hashes/sha1-hashes.go rename to src/058-sha1-hashes/sha1-hashes.go diff --git a/src/057-sha1-hashes/sha1-hashes.sh b/src/058-sha1-hashes/sha1-hashes.sh similarity index 100% rename from src/057-sha1-hashes/sha1-hashes.sh rename to src/058-sha1-hashes/sha1-hashes.sh diff --git a/src/058-base64-encoding/base64-encoding.go b/src/059-base64-encoding/base64-encoding.go similarity index 100% rename from src/058-base64-encoding/base64-encoding.go rename to src/059-base64-encoding/base64-encoding.go diff --git a/src/059-reading-files/reading-files.go b/src/060-reading-files/reading-files.go similarity index 100% rename from src/059-reading-files/reading-files.go rename to src/060-reading-files/reading-files.go diff --git a/src/060-writing-files/writing-files.go b/src/061-writing-files/writing-files.go similarity index 100% rename from src/060-writing-files/writing-files.go rename to src/061-writing-files/writing-files.go diff --git a/src/061-line-filters/line-filters.go b/src/062-line-filters/line-filters.go similarity index 100% rename from src/061-line-filters/line-filters.go rename to src/062-line-filters/line-filters.go diff --git a/src/061-line-filters/line-filters.sh b/src/062-line-filters/line-filters.sh similarity index 100% rename from src/061-line-filters/line-filters.sh rename to src/062-line-filters/line-filters.sh diff --git a/src/062-command-line-arguments/command-line-arguments.go b/src/063-command-line-arguments/command-line-arguments.go similarity index 100% rename from src/062-command-line-arguments/command-line-arguments.go rename to src/063-command-line-arguments/command-line-arguments.go diff --git a/src/062-command-line-arguments/command-line-arguments.sh b/src/063-command-line-arguments/command-line-arguments.sh similarity index 100% rename from src/062-command-line-arguments/command-line-arguments.sh rename to src/063-command-line-arguments/command-line-arguments.sh diff --git a/src/063-command-line-flags/command-line-flags.go b/src/064-command-line-flags/command-line-flags.go similarity index 100% rename from src/063-command-line-flags/command-line-flags.go rename to src/064-command-line-flags/command-line-flags.go diff --git a/src/064-environment-variables/environment-variables.go b/src/065-environment-variables/environment-variables.go similarity index 100% rename from src/064-environment-variables/environment-variables.go rename to src/065-environment-variables/environment-variables.go diff --git a/src/064-environment-variables/environment-variables.sh b/src/065-environment-variables/environment-variables.sh similarity index 100% rename from src/064-environment-variables/environment-variables.sh rename to src/065-environment-variables/environment-variables.sh diff --git a/src/065-spawning-processes/spawning-processes.go b/src/066-spawning-processes/spawning-processes.go similarity index 100% rename from src/065-spawning-processes/spawning-processes.go rename to src/066-spawning-processes/spawning-processes.go diff --git a/src/065-spawning-processes/spawning-processes.sh b/src/066-spawning-processes/spawning-processes.sh similarity index 100% rename from src/065-spawning-processes/spawning-processes.sh rename to src/066-spawning-processes/spawning-processes.sh diff --git a/src/066-execing-processes/execing-processes.go b/src/067-execing-processes/execing-processes.go similarity index 100% rename from src/066-execing-processes/execing-processes.go rename to src/067-execing-processes/execing-processes.go diff --git a/src/067-signals/signals.go b/src/068-signals/signals.go similarity index 100% rename from src/067-signals/signals.go rename to src/068-signals/signals.go diff --git a/src/067-signals/signals.sh b/src/068-signals/signals.sh similarity index 100% rename from src/067-signals/signals.sh rename to src/068-signals/signals.sh diff --git a/src/068-exit/exit.go b/src/069-exit/exit.go similarity index 100% rename from src/068-exit/exit.go rename to src/069-exit/exit.go diff --git a/src/068-exit/exit.sh b/src/069-exit/exit.sh similarity index 100% rename from src/068-exit/exit.sh rename to src/069-exit/exit.sh diff --git a/src/069-http-client/http-client.go b/src/070-http-client/http-client.go similarity index 100% rename from src/069-http-client/http-client.go rename to src/070-http-client/http-client.go diff --git a/src/070-https-client/https-client.go b/src/071-https-client/https-client.go similarity index 100% rename from src/070-https-client/https-client.go rename to src/071-https-client/https-client.go diff --git a/src/071-redis/redis.go b/src/072-redis/redis.go similarity index 100% rename from src/071-redis/redis.go rename to src/072-redis/redis.go diff --git a/src/071-redis/redis.sh b/src/072-redis/redis.sh similarity index 100% rename from src/071-redis/redis.sh rename to src/072-redis/redis.sh diff --git a/src/072-postgres/postgres.go b/src/073-postgres/postgres.go similarity index 100% rename from src/072-postgres/postgres.go rename to src/073-postgres/postgres.go diff --git a/src/072-postgres/postgres.sh b/src/073-postgres/postgres.sh similarity index 100% rename from src/072-postgres/postgres.sh rename to src/073-postgres/postgres.sh diff --git a/src/073-sending-email/sending-email.go b/src/074-sending-email/sending-email.go similarity index 100% rename from src/073-sending-email/sending-email.go rename to src/074-sending-email/sending-email.go diff --git a/src/074-hello-web/hello-web.go b/src/075-hello-web/hello-web.go similarity index 100% rename from src/074-hello-web/hello-web.go rename to src/075-hello-web/hello-web.go diff --git a/src/075-responses/responses.go b/src/076-responses/responses.go similarity index 100% rename from src/075-responses/responses.go rename to src/076-responses/responses.go diff --git a/src/075-responses/responses.sh b/src/076-responses/responses.sh similarity index 100% rename from src/075-responses/responses.sh rename to src/076-responses/responses.sh diff --git a/src/076-request-routing/request-routing.go b/src/077-request-routing/request-routing.go similarity index 100% rename from src/076-request-routing/request-routing.go rename to src/077-request-routing/request-routing.go diff --git a/src/076-request-routing/request-routing.sh b/src/077-request-routing/request-routing.sh similarity index 100% rename from src/076-request-routing/request-routing.sh rename to src/077-request-routing/request-routing.sh diff --git a/src/077-request-logging/request-logging.go b/src/078-request-logging/request-logging.go similarity index 100% rename from src/077-request-logging/request-logging.go rename to src/078-request-logging/request-logging.go diff --git a/src/078-static-content/static-content.go b/src/079-static-content/static-content.go similarity index 100% rename from src/078-static-content/static-content.go rename to src/079-static-content/static-content.go diff --git a/src/078-static-content/static-content.sh b/src/079-static-content/static-content.sh similarity index 100% rename from src/078-static-content/static-content.sh rename to src/079-static-content/static-content.sh diff --git a/src/079-basic-authentication/basic-authentication.go b/src/080-basic-authentication/basic-authentication.go similarity index 100% rename from src/079-basic-authentication/basic-authentication.go rename to src/080-basic-authentication/basic-authentication.go diff --git a/src/080-canonical-hosts/canonical-hosts.go b/src/081-canonical-hosts/canonical-hosts.go similarity index 100% rename from src/080-canonical-hosts/canonical-hosts.go rename to src/081-canonical-hosts/canonical-hosts.go diff --git a/src/080-canonical-hosts/canonical-hosts.sh b/src/081-canonical-hosts/canonical-hosts.sh similarity index 100% rename from src/080-canonical-hosts/canonical-hosts.sh rename to src/081-canonical-hosts/canonical-hosts.sh diff --git a/src/081-middleware/middleware.go b/src/082-middleware/middleware.go similarity index 100% rename from src/081-middleware/middleware.go rename to src/082-middleware/middleware.go diff --git a/src/082-graceful-shutdown/graceful-shutdown.go b/src/083-graceful-shutdown/graceful-shutdown.go similarity index 100% rename from src/082-graceful-shutdown/graceful-shutdown.go rename to src/083-graceful-shutdown/graceful-shutdown.go diff --git a/src/082-graceful-shutdown/graceful-shutdown.sh b/src/083-graceful-shutdown/graceful-shutdown.sh similarity index 100% rename from src/082-graceful-shutdown/graceful-shutdown.sh rename to src/083-graceful-shutdown/graceful-shutdown.sh diff --git a/src/083-https-servers/https-servers.go b/src/084-https-servers/https-servers.go similarity index 100% rename from src/083-https-servers/https-servers.go rename to src/084-https-servers/https-servers.go diff --git a/src/083-https-servers/https-servers.sh b/src/084-https-servers/https-servers.sh similarity index 100% rename from src/083-https-servers/https-servers.sh rename to src/084-https-servers/https-servers.sh diff --git a/tool/index.txt b/tool/index.txt index c1cffd5..98b30b0 100644 --- a/tool/index.txt +++ b/tool/index.txt @@ -43,7 +43,7 @@ timeouts scatter-gather rate-limiting worker-pools -nonblocking-channel-operations ~ +nonblocking-channel-operations closing-channels timers tickers