all: avoid bytes.NewBuffer(nil)
The practice encourages people to think this is the way to
create a bytes.Buffer when new(bytes.Buffer) or
just var buf bytes.Buffer work fine.
(html/token.go was missing the point altogether.)

R=golang-dev, bradfitz, r
CC=golang-dev
https://golang.org/cl/5637043
diff --git a/src/pkg/bufio/bufio_test.go b/src/pkg/bufio/bufio_test.go
index 6463bbb..a2ee849 100644
--- a/src/pkg/bufio/bufio_test.go
+++ b/src/pkg/bufio/bufio_test.go
@@ -688,7 +688,7 @@
 }
 
 func TestReadEmptyBuffer(t *testing.T) {
-	l, _ := NewReaderSize(bytes.NewBuffer(nil), minReadBufferSize)
+	l, _ := NewReaderSize(new(bytes.Buffer), minReadBufferSize)
 	line, isPrefix, err := l.ReadLine()
 	if err != io.EOF {
 		t.Errorf("expected EOF from ReadLine, got '%s' %t %s", line, isPrefix, err)
diff --git a/src/pkg/compress/flate/deflate_test.go b/src/pkg/compress/flate/deflate_test.go
index 24881d3..75d801d 100644
--- a/src/pkg/compress/flate/deflate_test.go
+++ b/src/pkg/compress/flate/deflate_test.go
@@ -229,14 +229,14 @@
 }
 
 func testToFromWithLevelAndLimit(t *testing.T, level int, input []byte, name string, limit int) error {
-	buffer := bytes.NewBuffer(nil)
-	w := NewWriter(buffer, level)
+	var buffer bytes.Buffer
+	w := NewWriter(&buffer, level)
 	w.Write(input)
 	w.Close()
 	if limit > 0 && buffer.Len() > limit {
 		t.Errorf("level: %d, len(compress(data)) = %d > limit = %d", level, buffer.Len(), limit)
 	}
-	r := NewReader(buffer)
+	r := NewReader(&buffer)
 	out, err := ioutil.ReadAll(r)
 	if err != nil {
 		t.Errorf("read: %s", err)
diff --git a/src/pkg/compress/lzw/reader_test.go b/src/pkg/compress/lzw/reader_test.go
index 0982157..e5be12f 100644
--- a/src/pkg/compress/lzw/reader_test.go
+++ b/src/pkg/compress/lzw/reader_test.go
@@ -81,7 +81,7 @@
 }
 
 func TestReader(t *testing.T) {
-	b := bytes.NewBuffer(nil)
+	var b bytes.Buffer
 	for _, tt := range lzwTests {
 		d := strings.Split(tt.desc, ";")
 		var order Order
@@ -97,7 +97,7 @@
 		rc := NewReader(strings.NewReader(tt.compressed), order, litWidth)
 		defer rc.Close()
 		b.Reset()
-		n, err := io.Copy(b, rc)
+		n, err := io.Copy(&b, rc)
 		if err != nil {
 			if err != tt.err {
 				t.Errorf("%s: io.Copy: %v want %v", tt.desc, err, tt.err)
@@ -116,7 +116,7 @@
 	b.SetBytes(int64(n))
 	buf0, _ := ioutil.ReadFile("../testdata/e.txt")
 	buf0 = buf0[:10000]
-	compressed := bytes.NewBuffer(nil)
+	compressed := new(bytes.Buffer)
 	w := NewWriter(compressed, LSB, 8)
 	for i := 0; i < n; i += len(buf0) {
 		io.Copy(w, bytes.NewBuffer(buf0))
diff --git a/src/pkg/compress/zlib/writer_test.go b/src/pkg/compress/zlib/writer_test.go
index a71894d..1c75d08 100644
--- a/src/pkg/compress/zlib/writer_test.go
+++ b/src/pkg/compress/zlib/writer_test.go
@@ -124,8 +124,8 @@
 
 func TestWriterDictIsUsed(t *testing.T) {
 	var input = []byte("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")
-	buf := bytes.NewBuffer(nil)
-	compressor, err := NewWriterDict(buf, BestCompression, input)
+	var buf bytes.Buffer
+	compressor, err := NewWriterDict(&buf, BestCompression, input)
 	if err != nil {
 		t.Errorf("error in NewWriterDict: %s", err)
 		return
diff --git a/src/pkg/encoding/asn1/marshal.go b/src/pkg/encoding/asn1/marshal.go
index c181e43..774bee7 100644
--- a/src/pkg/encoding/asn1/marshal.go
+++ b/src/pkg/encoding/asn1/marshal.go
@@ -24,7 +24,7 @@
 }
 
 func newForkableWriter() *forkableWriter {
-	return &forkableWriter{bytes.NewBuffer(nil), nil, nil}
+	return &forkableWriter{new(bytes.Buffer), nil, nil}
 }
 
 func (f *forkableWriter) fork() (pre, post *forkableWriter) {
diff --git a/src/pkg/encoding/gob/encoder_test.go b/src/pkg/encoding/gob/encoder_test.go
index 7a30f91..9a62cf9 100644
--- a/src/pkg/encoding/gob/encoder_test.go
+++ b/src/pkg/encoding/gob/encoder_test.go
@@ -570,8 +570,7 @@
 		"bo": []bool{false},
 		"st": []string{"s"},
 	}
-	buf := bytes.NewBuffer(nil)
-	enc := NewEncoder(buf)
+	enc := NewEncoder(new(bytes.Buffer))
 	err := enc.Encode(m)
 	if err != nil {
 		t.Errorf("encode map: %s", err)
@@ -579,7 +578,7 @@
 }
 
 func TestSliceReusesMemory(t *testing.T) {
-	buf := bytes.NewBuffer(nil)
+	buf := new(bytes.Buffer)
 	// Bytes
 	{
 		x := []byte("abcd")
diff --git a/src/pkg/encoding/hex/hex.go b/src/pkg/encoding/hex/hex.go
index eb7e7ca..e7c22da 100644
--- a/src/pkg/encoding/hex/hex.go
+++ b/src/pkg/encoding/hex/hex.go
@@ -103,8 +103,8 @@
 // Dump returns a string that contains a hex dump of the given data. The format
 // of the hex dump matches the output of `hexdump -C` on the command line.
 func Dump(data []byte) string {
-	buf := bytes.NewBuffer(nil)
-	dumper := Dumper(buf)
+	var buf bytes.Buffer
+	dumper := Dumper(&buf)
 	dumper.Write(data)
 	dumper.Close()
 	return string(buf.Bytes())
diff --git a/src/pkg/encoding/hex/hex_test.go b/src/pkg/encoding/hex/hex_test.go
index 8e1838e..ff60e89 100644
--- a/src/pkg/encoding/hex/hex_test.go
+++ b/src/pkg/encoding/hex/hex_test.go
@@ -155,8 +155,8 @@
 	}
 
 	for stride := 1; stride < len(in); stride++ {
-		out := bytes.NewBuffer(nil)
-		dumper := Dumper(out)
+		var out bytes.Buffer
+		dumper := Dumper(&out)
 		done := 0
 		for done < len(in) {
 			todo := done + stride
diff --git a/src/pkg/encoding/pem/pem.go b/src/pkg/encoding/pem/pem.go
index 3eb7c9f..38afbb4 100644
--- a/src/pkg/encoding/pem/pem.go
+++ b/src/pkg/encoding/pem/pem.go
@@ -251,7 +251,7 @@
 }
 
 func EncodeToMemory(b *Block) []byte {
-	buf := bytes.NewBuffer(nil)
-	Encode(buf, b)
+	var buf bytes.Buffer
+	Encode(&buf, b)
 	return buf.Bytes()
 }
diff --git a/src/pkg/encoding/pem/pem_test.go b/src/pkg/encoding/pem/pem_test.go
index 11efe55..9ae1578 100644
--- a/src/pkg/encoding/pem/pem_test.go
+++ b/src/pkg/encoding/pem/pem_test.go
@@ -73,7 +73,7 @@
 
 func TestLineBreaker(t *testing.T) {
 	for i, test := range lineBreakerTests {
-		buf := bytes.NewBuffer(nil)
+		buf := new(bytes.Buffer)
 		var breaker lineBreaker
 		breaker.out = buf
 		_, err := breaker.Write([]byte(test.in))
@@ -93,7 +93,7 @@
 	}
 
 	for i, test := range lineBreakerTests {
-		buf := bytes.NewBuffer(nil)
+		buf := new(bytes.Buffer)
 		var breaker lineBreaker
 		breaker.out = buf
 
diff --git a/src/pkg/exp/html/escape.go b/src/pkg/exp/html/escape.go
index 42be865..8f62a8c 100644
--- a/src/pkg/exp/html/escape.go
+++ b/src/pkg/exp/html/escape.go
@@ -233,8 +233,8 @@
 	if strings.IndexAny(s, escapedChars) == -1 {
 		return s
 	}
-	buf := bytes.NewBuffer(nil)
-	escape(buf, s)
+	var buf bytes.Buffer
+	escape(&buf, s)
 	return buf.String()
 }
 
diff --git a/src/pkg/exp/html/parse_test.go b/src/pkg/exp/html/parse_test.go
index 1528dff..f3f966c 100644
--- a/src/pkg/exp/html/parse_test.go
+++ b/src/pkg/exp/html/parse_test.go
@@ -159,9 +159,9 @@
 	if n == nil || len(n.Child) == 0 {
 		return "", nil
 	}
-	b := bytes.NewBuffer(nil)
+	var b bytes.Buffer
 	for _, child := range n.Child {
-		if err := dumpLevel(b, child, 0); err != nil {
+		if err := dumpLevel(&b, child, 0); err != nil {
 			return "", err
 		}
 	}
diff --git a/src/pkg/exp/html/token.go b/src/pkg/exp/html/token.go
index 5a385a1..b5e9c2d 100644
--- a/src/pkg/exp/html/token.go
+++ b/src/pkg/exp/html/token.go
@@ -77,8 +77,7 @@
 	if len(t.Attr) == 0 {
 		return t.Data
 	}
-	buf := bytes.NewBuffer(nil)
-	buf.WriteString(t.Data)
+	buf := bytes.NewBufferString(t.Data)
 	for _, a := range t.Attr {
 		buf.WriteByte(' ')
 		buf.WriteString(a.Key)
diff --git a/src/pkg/exp/html/token_test.go b/src/pkg/exp/html/token_test.go
index 672d60c..61d7400 100644
--- a/src/pkg/exp/html/token_test.go
+++ b/src/pkg/exp/html/token_test.go
@@ -555,8 +555,8 @@
 
 func TestBufAPI(t *testing.T) {
 	s := "0<a>1</a>2<b>3<a>4<a>5</a>6</b>7</a>8<a/>9"
-	z := NewTokenizer(bytes.NewBuffer([]byte(s)))
-	result := bytes.NewBuffer(nil)
+	z := NewTokenizer(bytes.NewBufferString(s))
+	var result bytes.Buffer
 	depth := 0
 loop:
 	for {
diff --git a/src/pkg/html/escape.go b/src/pkg/html/escape.go
index dbe1b9c..fee771a 100644
--- a/src/pkg/html/escape.go
+++ b/src/pkg/html/escape.go
@@ -238,8 +238,8 @@
 	if strings.IndexAny(s, escapedChars) == -1 {
 		return s
 	}
-	buf := bytes.NewBuffer(nil)
-	escape(buf, s)
+	var buf bytes.Buffer
+	escape(&buf, s)
 	return buf.String()
 }
 
diff --git a/src/pkg/image/jpeg/writer_test.go b/src/pkg/image/jpeg/writer_test.go
index e4b56d2..b8e8fa3 100644
--- a/src/pkg/image/jpeg/writer_test.go
+++ b/src/pkg/image/jpeg/writer_test.go
@@ -54,14 +54,14 @@
 			continue
 		}
 		// Encode that image as JPEG.
-		buf := bytes.NewBuffer(nil)
-		err = Encode(buf, m0, &Options{Quality: tc.quality})
+		var buf bytes.Buffer
+		err = Encode(&buf, m0, &Options{Quality: tc.quality})
 		if err != nil {
 			t.Error(tc.filename, err)
 			continue
 		}
 		// Decode that JPEG.
-		m1, err := Decode(buf)
+		m1, err := Decode(&buf)
 		if err != nil {
 			t.Error(tc.filename, err)
 			continue
diff --git a/src/pkg/image/png/writer_test.go b/src/pkg/image/png/writer_test.go
index 228eccc..644c4fb 100644
--- a/src/pkg/image/png/writer_test.go
+++ b/src/pkg/image/png/writer_test.go
@@ -35,12 +35,12 @@
 }
 
 func encodeDecode(m image.Image) (image.Image, error) {
-	b := bytes.NewBuffer(nil)
-	err := Encode(b, m)
+	var b bytes.Buffer
+	err := Encode(&b, m)
 	if err != nil {
 		return nil, err
 	}
-	m, err = Decode(b)
+	m, err = Decode(&b)
 	if err != nil {
 		return nil, err
 	}
diff --git a/src/pkg/old/template/template_test.go b/src/pkg/old/template/template_test.go
index f42a61a..854a548 100644
--- a/src/pkg/old/template/template_test.go
+++ b/src/pkg/old/template/template_test.go
@@ -795,8 +795,8 @@
 				t.Errorf("For %q, expected error, got none.", c.in)
 				continue
 			}
-			buf := bytes.NewBuffer(nil)
-			err = tmpl.Execute(buf, data)
+			var buf bytes.Buffer
+			err = tmpl.Execute(&buf, data)
 			if err != nil {
 				t.Error("unexpected Execute error: ", err)
 				continue