]> Cypherpunks repositories - gostls13.git/commitdiff
time/format: avoid growslice in time.String()/time.GoString()
authorkorzhao <korzhao95@gmail.com>
Fri, 20 Aug 2021 23:26:19 +0000 (07:26 +0800)
committerAlexander Rakoczy <alex@golang.org>
Wed, 25 Aug 2021 18:27:41 +0000 (18:27 +0000)
Pre-allocate the slice of buf with enough capacity
to avoid growslice calls.

benchmark                   old ns/op     new ns/op     delta
BenchmarkTimeString-4       493           409           -17.12%
BenchmarkTimeGoString-4     309           182           -41.30%

benchmark                   old allocs     new allocs     delta
BenchmarkTimeString-4       5              3              -40.00%
BenchmarkTimeGoString-4     4              1              -75.00%

benchmark                   old bytes     new bytes     delta
BenchmarkTimeString-4       152           128           -15.79%
BenchmarkTimeGoString-4     248           80            -67.74%

Change-Id: I64eabe2ab0b3d4a846453c2e8e548a831d720b8c
Reviewed-on: https://go-review.googlesource.com/c/go/+/343971
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Alexander Rakoczy <alex@golang.org>

src/time/format.go

index f4b4f48142f69387b72babac32ac888ff036145d..7ae89c557d59be4d4a0bb674428b801b95c548e6 100644 (file)
@@ -479,7 +479,7 @@ func (t Time) String() string {
                }
                m1, m2 := m2/1e9, m2%1e9
                m0, m1 := m1/1e9, m1%1e9
-               var buf []byte
+               buf := make([]byte, 0, 24)
                buf = append(buf, " m="...)
                buf = append(buf, sign)
                wid := 0
@@ -498,7 +498,8 @@ func (t Time) String() string {
 // GoString implements fmt.GoStringer and formats t to be printed in Go source
 // code.
 func (t Time) GoString() string {
-       buf := []byte("time.Date(")
+       buf := make([]byte, 0, 70)
+       buf = append(buf, "time.Date("...)
        buf = appendInt(buf, t.Year(), 0)
        month := t.Month()
        if January <= month && month <= December {