From: Ian Lance Taylor
@@ -362,7 +362,7 @@ multiword names.
Go needs fewer semicolons between statements than do other C variants.
Semicolons are never required at the top level.
-Also they are separators, not terminators, so they
+And they are separators, not terminators, so they
can be left off the last element of a statement or declaration list,
a convenience
for one-line funcs and the like.
@@ -656,8 +656,8 @@ case *int:
-One of Go's unusual properties is that functions and methods
-can return multiple values. This feature can be used to
+One of Go's unusual features is that functions and methods
+can return multiple values. This can be used to
improve on a couple of clumsy idioms in C programs: in-band
error returns (such as -1 for EOF)
and modifying an argument.
@@ -745,7 +745,7 @@ of io.ReadFull that uses them well:
func ReadFull(r Reader, buf []byte) (n int, err os.Error) {
- for len(buf) > 0 && err != nil {
+ for len(buf) > 0 && err == nil {
var nr int;
nr, err = r.Read(buf);
n += nr;
@@ -1162,7 +1162,7 @@ return a string rather than filling in a provided buffer.
You don't need to provide a format string. For each of Printf,
-fmt.Fprintf and fmt.Sprintf there is another pair
+Fprintf and Sprintf there is another pair
of functions, for instance Print and Println.
These functions do not take a format string but instead generate a default
format for each argument. The ln version also inserts a blank
@@ -1175,7 +1175,9 @@ fmt.Fprint(os.Stdout, "Hello ", 23, "\n");
fmt.Println(fmt.Sprint("Hello ", 23));
-Recall that fmt.Fprint and friends take as a first argument any object
+As mentioned in
+the tutorial, fmt.Fprint
+and friends take as a first argument any object
that implements the io.Writer interface; the variables os.Stdout
and os.Stderr are familiar instances.
-Methods can be defined for any named type except pointers and interfaces; +Methods can be defined for any named type that is not a pointer or an interface; the receiver does not have to be a struct.
In the discussion of slices above, we wrote an Append
@@ -2078,7 +2080,8 @@ Receivers always block until there is data to receive.
If the channel is unbuffered, the sender blocks until the receiver has
received the value.
If the channel has a buffer, the sender blocks only until the
-value has been copied to the buffer.
+value has been copied to the buffer; if the buffer is full, this
+means waiting until some receiver has retrieved a value.
A buffered channel can be used like a semaphore, for instance to
@@ -2147,7 +2150,7 @@ Here's a schematic definition of type Request.
type Request struct {
args []int;
f func([]int) int;
- resultChan <-chan int;
+ resultChan chan int;
}