mirror of
https://github.com/golang/go
synced 2024-09-06 00:19:45 +00:00
spec: clarify that slice a expression shares underlying array with operand
The spec was not very precise as to what happens with respect to sharing if a sliced operand is (a pointer to) an array. Added a small clarification and a supporting example. Fixes #31689. Change-Id: Ic49351bec2033abd3f5428154ec3e9a7c2c9eaa5 Reviewed-on: https://go-review.googlesource.com/c/go/+/177139 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
02d24fc252
commit
1e3ffb0c90
|
@ -1,6 +1,6 @@
|
|||
<!--{
|
||||
"Title": "The Go Programming Language Specification",
|
||||
"Subtitle": "Version of May 13, 2019",
|
||||
"Subtitle": "Version of May 14, 2019",
|
||||
"Path": "/ref/spec"
|
||||
}-->
|
||||
|
||||
|
@ -3262,6 +3262,14 @@ is a <code>nil</code> slice. Otherwise, if the result is a slice, it shares its
|
|||
array with the operand.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
var a [10]int
|
||||
s1 := a[3:7] // underlying array of s1 is array a; &s1[2] == &a[5]
|
||||
s2 := s1[1:4] // underlying array of s2 is underlying array of s1 which is array a; &s2[1] == &a[5]
|
||||
s2[1] = 42 // s2[1] == s1[2] == a[5] == 42; they all refer to the same underlying array element
|
||||
</pre>
|
||||
|
||||
|
||||
<h4>Full slice expressions</h4>
|
||||
|
||||
<p>
|
||||
|
|
Loading…
Reference in a new issue