diff --git a/doc/effective_go.html b/doc/effective_go.html index dc49ca9688..5eec23fdfd 100644 --- a/doc/effective_go.html +++ b/doc/effective_go.html @@ -1,6 +1,14 @@

Introduction

+

+Go is a new language. Although it's in the C family of languages +it has some unusual properties that make effective Go programs +different in character from programs in C, C++, or Java. +To write Go well, it's important to understand its properties +and idioms. +

+

This document gives tips for writing clear, idiomatic Go code and points out common mistakes. @@ -287,11 +295,11 @@ A comment can introduce a group of related constants or variables.

-// Flags to Open wrapping those of the underlying system.
+// Flags to Open, wrapping those of the underlying system.
 // Not all flags may be implemented on a given system.
 const (
-	O_RDONLY = syscall.O_RDONLY;	// open the file read-only.
-	O_WRONLY = syscall.O_WRONLY;	// open the file write-only.
+	O_RDONLY = syscall.O_RDONLY;	// Open file read-only.
+	O_WRONLY = syscall.O_WRONLY;	// Open file write-only.
 	...
 )
 
@@ -303,9 +311,9 @@ a mutex.

-// Variables protected by counterLock.
+// Variables protected by countLock.
 var (
-	counterLock	sync.Mutex;
+	countLock	sync.Mutex;
 	inputCount	uint32;
 	outputCount	uint32;
 	errorCount	uint32;
@@ -357,9 +365,8 @@ the buffered Reader is bufio.Reader, not bufio.B
 Similarly, once.Do is as precise and evocative as
 once.DoOrWaitUntilDone, and once.Do(f) reads
 better than once.DoOrWaitUntilDone(f).
-Contrary to popular belief, encoding small essays into
-function names does not make it possible
-to use them without documentation.
+Encoding small essays into function names is not Go style;
+clear names with good documentation is.
 

Use the -er convention for interface names

@@ -564,24 +571,41 @@ codeUsing(f);

Return structured errors

-Implementations of os.Errors should -describe the error but also include context. +Implementations of os.Error should +describe the error and provide context. For example, os.Open returns an os.PathError: /src/pkg/os/file.go:
-XXX definition of PathError and .String
+// PathError records an error and the operation and
+// file path that caused it.
+type PathError struct {
+	Op string;
+	Path string;
+	Error Error;
+}
+
+func (e *PathError) String() string {
+	return e.Op + " " + e.Path + ": " + e.Error.String();
+}
 
PathError's String formats -the error nicely and is the usual way the error gets used. +the error nicely, including the operation and file name +tha failed; just printing the error generates a +message, such as +
+open /etc/passwx: no such file or directory
+
+that is useful even if printed far from the call that +triggered it. +

+ +

Callers that care about the precise error details can use a type switch or a type guard to look for specific -errors and then extract details. - -

-XXX example here - MkdirAll
-
+errors and extract details. +

Programmer-defined types