diff --git a/doc/go_tutorial.html b/doc/go_tutorial.html
index 822f9626ee..42125cbbdb 100644
--- a/doc/go_tutorial.html
+++ b/doc/go_tutorial.html
@@ -19,9 +19,6 @@ The presentation here proceeds through a series of modest programs to illustrate
key features of the language. All the programs work (at time of writing) and are
checked into the repository in the directory /doc/progs/.
-Program snippets are annotated with the line number in the original file; for -cleanliness, blank lines remain blank. -
Let's start in the usual way: @@ -29,7 +26,7 @@ Let's start in the usual way:
package main
-import fmt "fmt" // Package implementing formatted I/O.
+import fmt "fmt" // Package implementing formatted I/O.
func main() {
fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界\n")
@@ -121,18 +118,18 @@ Next up, here's a version of the Unix utility echo(1):
import (
"os"
- "flag" // command line option parser
+ "flag" // command line option parser
)
var omitNewline = flag.Bool("n", false, "don't print final newline")
const (
- Space = " "
+ Space = " "
Newline = "\n"
)
func main() {
- flag.Parse() // Scans the arg list and sets up flags
+ flag.Parse() // Scans the arg list and sets up flags
var s string = ""
for i := 0; i < flag.NArg(); i++ {
if i > 0 {
@@ -176,12 +173,13 @@ a naming conflict.
Given os.Stdout we can use its WriteString method to print the string.
-Having imported the flag package, line 12 creates a global variable to hold
-the value of echo's -n flag. The variable omitNewline has type *bool, pointer
-to bool.
+After importing the flag package, we use a var declaration
+to create and initialize a global variable, called omitNewline,
+to hold the value of echo's -n flag.
+The variable has type *bool, pointer to bool.
-In main.main, we parse the arguments (line 20) and then create a local
-string variable we will use to build the output.
+In main.main, we parse the arguments (the call to flag.Parse) and then create a local
+string variable with which to build the output.
The declaration statement has the form
@@ -261,7 +259,9 @@ reassigning it. This snippet from strings.go is legal code:
s := "hello"
- if s[1] != 'e' { os.Exit(1) }
+ if s[1] != 'e' {
+ os.Exit(1)
+ }
s = "good bye"
var p *string = &s
*p = "ciao"
@@ -540,7 +540,7 @@ return n
but for simple structures like File it's easier to return the address of a
-composite literal, as is done here on line 21.
+composite literal, as is done here in the return statement from newFile.
We can use the factory to construct some familiar, exported variables of type *File:
@@ -573,9 +573,9 @@ multi-value return as a parenthesized list of declarations; syntactically
they look just like a second parameter list. The function
syscall.Open
also has a multi-value return, which we can grab with the multi-variable
-declaration on line 31; it declares r and e to hold the two values,
+declaration on the first line; it declares r and e to hold the two values,
both of type int (although you'd have to look at the syscall package
-to see that). Finally, line 35 returns two values: a pointer to the new File
+to see that). Finally, OpenFile returns two values: a pointer to the new File
and the error. If syscall.Open fails, the file descriptor r will
be negative and newFile will return nil.
@@ -689,7 +689,7 @@ func main() {
file.Stdout.Write(hello)
f, err := file.Open("/does/not/exist")
if f == nil {
- fmt.Printf("can't open file; err=%s\n", err.String())
+ fmt.Printf("can't open file; err=%s\n", err.String())
os.Exit(1)
}
}
@@ -938,9 +938,9 @@ arrays of integers, strings, etc.; here's the code for arrays of inttype IntSlice []int
-func (p IntSlice) Len() int { return len(p) }
-func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
-func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
+func (p IntSlice) Len() int { return len(p) }
+func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
+func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
Here we see methods defined for non-struct types. You can define methods
@@ -966,18 +966,18 @@ to implement the three methods for that type, like this:
type day struct {
- num int
- shortName string
- longName string
+ num int
+ shortName string
+ longName string
}
type dayArray struct {
data []*day
}
-func (p *dayArray) Len() int { return len(p.data) }
-func (p *dayArray) Less(i, j int) bool { return p.data[i].num < p.data[j].num }
-func (p *dayArray) Swap(i, j int) { p.data[i], p.data[j] = p.data[j], p.data[i] }
+func (p *dayArray) Len() int { return len(p.data) }
+func (p *dayArray) Less(i, j int) bool { return p.data[i].num < p.data[j].num }
+func (p *dayArray) Swap(i, j int) { p.data[i], p.data[j] = p.data[j], p.data[i] }
@@ -1013,7 +1013,7 @@ can just say %d; Printf knows the size and signedness
integer and can do the right thing for you. The snippet
var u64 uint64 = 1<<64-1
+--> var u64 uint64 = 1<<64 - 1
fmt.Printf("%d %d\n", u64, int64(u64))
@@ -1183,7 +1183,7 @@ Here is the first function in progs/sieve.go:
-->// Send the sequence 2, 3, 4, ... to channel 'ch'.
func generate(ch chan int) {
for i := 2; ; i++ {
- ch <- i // Send 'i' to channel 'ch'.
+ ch <- i // Send 'i' to channel 'ch'.
}
}
@@ -1203,9 +1203,9 @@ operator <- (receive) retrieves the next value on the channel.
// removing those divisible by 'prime'.
func filter(in, out chan int, prime int) {
for {
- i := <-in // Receive value of new variable 'i' from 'in'.
- if i % prime != 0 {
- out <- i // Send 'i' to channel 'out'.
+ i := <-in // Receive value of new variable 'i' from 'in'.
+ if i%prime != 0 {
+ out <- i // Send 'i' to channel 'out'.
}
}
}
@@ -1238,8 +1238,8 @@ together:
func main() {
- ch := make(chan int) // Create a new channel.
- go generate(ch) // Start generate() as a goroutine.
+ ch := make(chan int) // Create a new channel.
+ go generate(ch) // Start generate() as a goroutine.
for i := 0; i < 100; i++ { // Print the first hundred primes.
prime := <-ch
fmt.Println(prime)
@@ -1262,7 +1262,7 @@ of generate, from progs/sieve1.go:
func generate() chan int {
ch := make(chan int)
- go func(){
+ go func() {
for i := 2; ; i++ {
ch <- i
}
@@ -1288,7 +1288,7 @@ The same change can be made to filter:
out := make(chan int)
go func() {
for {
- if i := <-in; i % prime != 0 {
+ if i := <-in; i%prime != 0 {
out <- i
}
}
@@ -1337,8 +1337,8 @@ that will be used for the reply.
type request struct {
- a, b int
- replyc chan int
+ a, b int
+ replyc chan int
}
@@ -1364,7 +1364,7 @@ a long-running operation, starting a goroutine to do the actual work.
-->func server(op binOp, service chan *request) {
for {
req := <-service
- go run(op, req) // don't wait for it
+ go run(op, req) // don't wait for it
}
}
@@ -1396,8 +1396,8 @@ does it check the results.
req.replyc = make(chan int)
adder <- req
}
- for i := N-1; i >= 0; i-- { // doesn't matter what order
- if <-reqs[i].replyc != N + 2*i {
+ for i := N - 1; i >= 0; i-- { // doesn't matter what order
+ if <-reqs[i].replyc != N+2*i {
fmt.Println("fail at", i)
}
}
@@ -1425,7 +1425,7 @@ It passes the quit channel to the server function, which uses it li
for {
select {
case req := <-service:
- go run(op, req) // don't wait for it
+ go run(op, req) // don't wait for it
case <-quit:
return
}
diff --git a/doc/go_tutorial.txt b/doc/go_tutorial.txt
index 17ef6eee93..858958d98d 100644
--- a/doc/go_tutorial.txt
+++ b/doc/go_tutorial.txt
@@ -20,9 +20,6 @@ The presentation here proceeds through a series of modest programs to illustrate
key features of the language. All the programs work (at time of writing) and are
checked into the repository in the directory "/doc/progs/".
-Program snippets are annotated with the line number in the original file; for
-cleanliness, blank lines remain blank.
-
Hello, World
----
@@ -136,12 +133,13 @@ a naming conflict.
Given "os.Stdout" we can use its "WriteString" method to print the string.
-Having imported the "flag" package, line 12 creates a global variable to hold
-the value of echo's "-n" flag. The variable "omitNewline" has type "*bool", pointer
-to "bool".
+After importing the "flag" package, we use a "var" declaration
+to create and initialize a global variable, called "omitNewline",
+to hold the value of echo's "-n" flag.
+The variable has type "*bool", pointer to "bool".
-In "main.main", we parse the arguments (line 20) and then create a local
-string variable we will use to build the output.
+In "main.main", we parse the arguments (the call to "flag.Parse") and then create a local
+string variable with which to build the output.
The declaration statement has the form
@@ -429,7 +427,7 @@ object. We could write
return n
but for simple structures like "File" it's easier to return the address of a
-composite literal, as is done here on line 21.
+composite literal, as is done here in the "return" statement from "newFile".
We can use the factory to construct some familiar, exported variables of type "*File":
@@ -447,9 +445,9 @@ multi-value return as a parenthesized list of declarations; syntactically
they look just like a second parameter list. The function
"syscall.Open"
also has a multi-value return, which we can grab with the multi-variable
-declaration on line 31; it declares "r" and "e" to hold the two values,
+declaration on the first line; it declares "r" and "e" to hold the two values,
both of type "int" (although you'd have to look at the "syscall" package
-to see that). Finally, line 35 returns two values: a pointer to the new "File"
+to see that). Finally, "OpenFile" returns two values: a pointer to the new "File"
and the error. If "syscall.Open" fails, the file descriptor "r" will
be negative and "newFile" will return "nil".