Commit 1e3ffb0c authored by Robert Griesemer's avatar Robert Griesemer

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/+/177139Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
Reviewed-by: default avatarRob Pike <r@golang.org>
Reviewed-by: default avatarKeith Randall <khr@golang.org>
parent 02d24fc2
<!--{
"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>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment