| // 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 | |
| } | |