liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 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
}