diff options
| author | Martin Möhrmann <martin@golang.org> | 2021-11-01 06:42:01 +0100 |
|---|---|---|
| committer | Martin Möhrmann <martin@golang.org> | 2021-11-01 14:45:28 +0000 |
| commit | 82f902ae8e2b7f7eff0cdb087e47e939cc296a62 (patch) | |
| tree | 90fdfdaacdb208e39bcbb9efbe4a5b0e5fe72944 /src/strings/clone.go | |
| parent | 4056934e483c51fa046f9c2d1ee35f0385b84d91 (diff) | |
| download | go-82f902ae8e2b7f7eff0cdb087e47e939cc296a62.tar.xz | |
strings: align Clone output with string([]byte(""))
Add a comment how strings of length 0 are treated and
that they always will result in the return of a string
equal to the constant string "".
The previous implementation would return a string header that uses
runtime.zerobase as the backing array pointer while the string constant
"" has 0 as pointer value.
Using 0 has the backing array pointer is also the behaviour of
string([]byte(input)) which makes the new behaviour a better drop in
replacement.
Change-Id: Ic5460e9494b6708edbdfa4361e878d50db54ba10
Reviewed-on: https://go-review.googlesource.com/c/go/+/360255
Trust: Martin Möhrmann <martin@golang.org>
Run-TryBot: Martin Möhrmann <martin@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/strings/clone.go')
| -rw-r--r-- | src/strings/clone.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/strings/clone.go b/src/strings/clone.go index 6097c6cc88..edd1497d9e 100644 --- a/src/strings/clone.go +++ b/src/strings/clone.go @@ -16,7 +16,12 @@ import ( // overuse of Clone can make programs use more memory. // Clone should typically be used only rarely, and only when // profiling indicates that it is needed. +// For strings of length zero the string "" will be returned +// and no allocation is made. func Clone(s string) string { + if len(s) == 0 { + return "" + } b := make([]byte, len(s)) copy(b, s) return *(*string)(unsafe.Pointer(&b)) |
