diff options
author | Rob Pike <r@golang.org> | 2011-04-27 09:59:27 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2011-04-27 09:59:27 -0700 |
commit | 2ccd20a646f3e6b46c4f3e779c3833071b735886 (patch) | |
tree | 9cf83cebed1933e92e1b5001bd12d6ab49ab8117 | |
parent | 5eeaca12d36e7556054b7694a41787c67e7b309c (diff) | |
download | go-2ccd20a646f3e6b46c4f3e779c3833071b735886.tar.gz go-2ccd20a646f3e6b46c4f3e779c3833071b735886.zip |
tutorial: replace the forever loops with finite counts in sieve programs.
Fixes #1742.
I hope.
Also this picks up an update to go_tutorial.html that should already have happened.
R=brainman, rsc, peterGo
CC=golang-dev
https://golang.org/cl/4452050
-rw-r--r-- | doc/go_tutorial.html | 52 | ||||
-rw-r--r-- | doc/progs/sieve.go | 2 | ||||
-rw-r--r-- | doc/progs/sieve1.go | 2 | ||||
-rwxr-xr-x | src/run.bash | 1 |
4 files changed, 29 insertions, 28 deletions
diff --git a/doc/go_tutorial.html b/doc/go_tutorial.html index 4d9c63e158..c87254ecb3 100644 --- a/doc/go_tutorial.html +++ b/doc/go_tutorial.html @@ -741,26 +741,27 @@ Building on the <code>file</code> package, here's a simple version of the Unix u 24 case nr > 0: 25 if nw, ew := file.Stdout.Write(buf[0:nr]); nw != nr { 26 fmt.Fprintf(os.Stderr, "cat: error writing from %s: %s\n", f.String(), ew.String()) -27 } -28 } -29 } -30 } +27 os.Exit(1) +28 } +29 } +30 } +31 } <p> -32 func main() { -33 flag.Parse() // Scans the arg list and sets up flags -34 if flag.NArg() == 0 { -35 cat(file.Stdin) -36 } -37 for i := 0; i < flag.NArg(); i++ { -38 f, err := file.Open(flag.Arg(i)) -39 if f == nil { -40 fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", flag.Arg(i), err) -41 os.Exit(1) -42 } -43 cat(f) -44 f.Close() -45 } -46 } +33 func main() { +34 flag.Parse() // Scans the arg list and sets up flags +35 if flag.NArg() == 0 { +36 cat(file.Stdin) +37 } +38 for i := 0; i < flag.NArg(); i++ { +39 f, err := file.Open(flag.Arg(i)) +40 if f == nil { +41 fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", flag.Arg(i), err) +42 os.Exit(1) +43 } +44 cat(f) +45 f.Close() +46 } +47 } </pre> <p> By now this should be easy to follow, but the <code>switch</code> statement introduces some @@ -858,10 +859,11 @@ and use it from within a mostly unchanged <code>cat()</code> function: 67 nw, ew := file.Stdout.Write(buf[0:nr]) 68 if nw != nr { 69 fmt.Fprintf(os.Stderr, "cat: error writing from %s: %s\n", r.String(), ew.String()) -70 } -71 } -72 } -73 } +70 os.Exit(1) +71 } +72 } +73 } +74 } </pre> <p> (We could also do the wrapping in <code>main</code> and leave <code>cat()</code> mostly alone, except @@ -1238,7 +1240,7 @@ together: 28 func main() { 29 ch := make(chan int) // Create a new channel. 30 go generate(ch) // Start generate() as a goroutine. -31 for { +31 for i := 0; i < 100; i++ { // Print the first hundred primes. 32 prime := <-ch 33 fmt.Println(prime) 34 ch1 := make(chan int) @@ -1318,7 +1320,7 @@ Now <code>main</code>'s interface to the prime sieve is a channel of primes: <pre> <!-- progs/sieve1.go /func.main/ /^}/ --> 46 func main() { 47 primes := sieve() -48 for { +48 for i := 0; i < 100; i++ { // Print the first hundred primes. 49 fmt.Println(<-primes) 50 } 51 } diff --git a/doc/progs/sieve.go b/doc/progs/sieve.go index fb649e0496..c7c3e78122 100644 --- a/doc/progs/sieve.go +++ b/doc/progs/sieve.go @@ -28,7 +28,7 @@ func filter(in, out chan int, prime int) { func main() { ch := make(chan int) // Create a new channel. go generate(ch) // Start generate() as a goroutine. - for { + for i := 0; i < 100; i++ { // Print the first hundred primes. prime := <-ch fmt.Println(prime) ch1 := make(chan int) diff --git a/doc/progs/sieve1.go b/doc/progs/sieve1.go index 71468d06ec..e785e20355 100644 --- a/doc/progs/sieve1.go +++ b/doc/progs/sieve1.go @@ -45,7 +45,7 @@ func sieve() chan int { func main() { primes := sieve() - for { + for i := 0; i < 100; i++ { // Print the first hundred primes. fmt.Println(<-primes) } } diff --git a/src/run.bash b/src/run.bash index ccdbc1aa9c..bb3d06c45c 100755 --- a/src/run.bash +++ b/src/run.bash @@ -74,7 +74,6 @@ gomake clean time gomake ogle ) || exit $? -[ "$GOHOSTOS" == windows ] || (xcd ../doc/progs time ./run ) || exit $? |