1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package sync_test 6 7import ( 8 "bytes" 9 "io" 10 "os" 11 "sync" 12 "time" 13) 14 15var bufPool = sync.Pool{ 16 New: func() any { 17 // The Pool's New function should generally only return pointer 18 // types, since a pointer can be put into the return interface 19 // value without an allocation: 20 return new(bytes.Buffer) 21 }, 22} 23 24// timeNow is a fake version of time.Now for tests. 25func timeNow() time.Time { 26 return time.Unix(1136214245, 0) 27} 28 29func Log(w io.Writer, key, val string) { 30 b := bufPool.Get().(*bytes.Buffer) 31 b.Reset() 32 // Replace this with time.Now() in a real logger. 33 b.WriteString(timeNow().UTC().Format(time.RFC3339)) 34 b.WriteByte(' ') 35 b.WriteString(key) 36 b.WriteByte('=') 37 b.WriteString(val) 38 w.Write(b.Bytes()) 39 bufPool.Put(b) 40} 41 42func ExamplePool() { 43 Log(os.Stdout, "path", "/search?q=flowers") 44 // Output: 2006-01-02T15:04:05Z path=/search?q=flowers 45} 46