]> Cypherpunks repositories - gostls13.git/commitdiff
slices: document two oddities
authorAlan Donovan <adonovan@google.com>
Fri, 20 Dec 2024 14:28:55 +0000 (09:28 -0500)
committerAlan Donovan <adonovan@google.com>
Sat, 21 Dec 2024 16:22:08 +0000 (08:22 -0800)
Fixes #70935

Change-Id: Idf4a38a05ba595d616b6469a14419ff873bbd354
Reviewed-on: https://go-review.googlesource.com/c/go/+/638095
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/slices/slices.go

index 40b4d088b06e391e5684bbf28c2518551a53cda8..32029cd8ed297cb86c6d6508a786c1c658b18944 100644 (file)
@@ -414,6 +414,7 @@ func Grow[S ~[]E, E any](s S, n int) S {
                panic("cannot be negative")
        }
        if n -= cap(s) - len(s); n > 0 {
+               // This expression allocates only once (see test).
                s = append(s[:cap(s)], make([]E, n)...)[:len(s)]
        }
        return s
@@ -483,6 +484,9 @@ func Concat[S ~[]E, E any](slices ...S) S {
                        panic("len out of range")
                }
        }
+       // Use Grow, not make, to round up to the size class:
+       // the extra space is otherwise unused and helps
+       // callers that append a few elements to the result.
        newslice := Grow[S](nil, size)
        for _, s := range slices {
                newslice = append(newslice, s...)