|  | // 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() any { | 
|  | // 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 | 
|  | } |