diff options
| author | Rob Pike <r@golang.org> | 2013-09-17 07:41:45 +1000 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2013-09-17 07:41:45 +1000 |
| commit | 2a5dcfafec11744d55692838912901c58ba43bd2 (patch) | |
| tree | 897527ff4f7d4403da02915ddcb0b1f962b62c08 | |
| parent | cec0954dd04b585b1cadacbb5f46ae5ab76a371c (diff) | |
| download | go-2a5dcfafec11744d55692838912901c58ba43bd2.tar.xz | |
effective_go: add a discussion of labeled break and continue
Fixes #5725.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/13705044
| -rw-r--r-- | doc/effective_go.html | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/doc/effective_go.html b/doc/effective_go.html index 8c66fa246f..7d2a904e50 100644 --- a/doc/effective_go.html +++ b/doc/effective_go.html @@ -506,6 +506,8 @@ slightly generalized <code>switch</code> is more flexible; <code>if</code> and <code>switch</code> accept an optional initialization statement like that of <code>for</code>; +<code>break</code> and <code>continue</code> statements +take an optional label to identify what to break or continue; and there are new control structures including a type switch and a multiway communications multiplexer, <code>select</code>. The syntax is also slightly different: @@ -781,7 +783,46 @@ func shouldEscape(c byte) bool { </pre> <p> -Here's a comparison routine for byte slices that uses two +Although they are not nearly as common in Go as some other C-like +languages, <code>break</code> statements can be used to terminate +a <code>switch</code> early. +Sometimes, though, it's necessary to break out of a surrounding loop, +not the switch, and in Go that can be accomplished by putting a label +on the loop and "breaking" to that label. +This example shows both uses. +</p> + +<pre> +Loop: + for n := 0; n < len(src); n += size { + case src[n] < sizeOne: + if validateOnly { + break + } + size = 1 + update(src[n]) + + case src[n] < sizeTwo: + if n+1 >= len(src) { + err = errShortInput + break Loop + } + if validateOnly { + break + } + size = 2 + update(src[n] + src[n+1]<<shift) + } + } +</pre> + +<p> +Of course, the <code>continue</code> statement also accepts an optional label +but it applies only to loops. +</p> + +<p> +To close this section, here's a comparison routine for byte slices that uses two <code>switch</code> statements: </p> <pre> |
