spec, unsafe: clarify unsafe.Slice docs

For #19367

Change-Id: If0ff8ddba3b6b48e2e198cf3653e73284c7572a3
Reviewed-on: https://go-review.googlesource.com/c/go/+/332409
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Ian Lance Taylor 2021-07-01 16:52:59 -07:00
parent 6125d0c426
commit 743f03eeb0
2 changed files with 9 additions and 5 deletions

View file

@ -1,6 +1,6 @@
<!--{ <!--{
"Title": "The Go Programming Language Specification", "Title": "The Go Programming Language Specification",
"Subtitle": "Version of Jun 28, 2021", "Subtitle": "Version of Jul 1, 2021",
"Path": "/ref/spec" "Path": "/ref/spec"
}--> }-->
@ -6782,7 +6782,8 @@ The rules for <a href="/pkg/unsafe#Pointer">valid uses</a> of <code>Pointer</cod
<p> <p>
The function <code>Slice</code> returns a slice whose underlying array starts at <code>ptr</code> The function <code>Slice</code> returns a slice whose underlying array starts at <code>ptr</code>
and whose length and capacity are <code>len</code>: and whose length and capacity are <code>len</code>.
<code>Slice(ptr, len)</code> is equivalent to
</p> </p>
<pre> <pre>
@ -6790,7 +6791,8 @@ and whose length and capacity are <code>len</code>:
</pre> </pre>
<p> <p>
As a special case, if <code>ptr</code> is <code>nil</code> and <code>len</code> is zero, except that, as a special case, if <code>ptr</code>
is <code>nil</code> and <code>len</code> is zero,
<code>Slice</code> returns <code>nil</code>. <code>Slice</code> returns <code>nil</code>.
</p> </p>

View file

@ -217,11 +217,13 @@ func Alignof(x ArbitraryType) uintptr
func Add(ptr Pointer, len IntegerType) Pointer func Add(ptr Pointer, len IntegerType) Pointer
// The function Slice returns a slice whose underlying array starts at ptr // The function Slice returns a slice whose underlying array starts at ptr
// and whose length and capacity are len: // and whose length and capacity are len.
// Slice(ptr, len) is equivalent to
// //
// (*[len]ArbitraryType)(unsafe.Pointer(ptr))[:] // (*[len]ArbitraryType)(unsafe.Pointer(ptr))[:]
// //
// As a special case, if ptr is nil and len is zero, Slice returns nil. // except that, as a special case, if ptr is nil and len is zero,
// Slice returns nil.
// //
// The len argument must be of integer type or an untyped constant. // The len argument must be of integer type or an untyped constant.
// A constant len argument must be non-negative and representable by a value of type int; // A constant len argument must be non-negative and representable by a value of type int;