| // Copyright 2016 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | package sync_test | 
 |  | 
 | import ( | 
 | 	"bytes" | 
 | 	"io" | 
 | 	"os" | 
 | 	"sync" | 
 | 	"time" | 
 | ) | 
 |  | 
 | var bufPool = sync.Pool{ | 
 | 	New: func() interface{} { | 
 | 		// The Pool's New function should generally only return pointer | 
 | 		// types, since a pointer can be put into the return interface | 
 | 		// value without an allocation: | 
 | 		return new(bytes.Buffer) | 
 | 	}, | 
 | } | 
 |  | 
 | // timeNow is a fake version of time.Now for tests. | 
 | func timeNow() time.Time { | 
 | 	return time.Unix(1136214245, 0) | 
 | } | 
 |  | 
 | func Log(w io.Writer, key, val string) { | 
 | 	b := bufPool.Get().(*bytes.Buffer) | 
 | 	b.Reset() | 
 | 	// Replace this with time.Now() in a real logger. | 
 | 	b.WriteString(timeNow().UTC().Format(time.RFC3339)) | 
 | 	b.WriteByte(' ') | 
 | 	b.WriteString(key) | 
 | 	b.WriteByte('=') | 
 | 	b.WriteString(val) | 
 | 	w.Write(b.Bytes()) | 
 | 	bufPool.Put(b) | 
 | } | 
 |  | 
 | func ExamplePool() { | 
 | 	Log(os.Stdout, "path", "/search?q=flowers") | 
 | 	// Output: 2006-01-02T15:04:05Z path=/search?q=flowers | 
 | } |