mirror of https://github.com/golang/go.git
spec: describe an edge case of slice-to-array conversions
Converting from nil slice to zero element array is ok, so explicitly describe the behavior in the spec. For #46505 Change-Id: I68f432deb6c21a7549bf7e870185fc62504b37f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/430835 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
c70fd4b30a
commit
4b58b30778
|
|
@ -1,6 +1,6 @@
|
||||||
<!--{
|
<!--{
|
||||||
"Title": "The Go Programming Language Specification",
|
"Title": "The Go Programming Language Specification",
|
||||||
"Subtitle": "Version of September 8, 2022",
|
"Subtitle": "Version of September 21, 2022",
|
||||||
"Path": "/ref/spec"
|
"Path": "/ref/spec"
|
||||||
}-->
|
}-->
|
||||||
|
|
||||||
|
|
@ -5542,10 +5542,10 @@ a <a href="#Run_time_panics">run-time panic</a> occurs.
|
||||||
<pre>
|
<pre>
|
||||||
s := make([]byte, 2, 4)
|
s := make([]byte, 2, 4)
|
||||||
|
|
||||||
a0 := ([0]byte)(s)
|
a0 := [0]byte(s)
|
||||||
a1 := ([1]byte)(s[1:]) // a1[0] == s[1]
|
a1 := [1]byte(s[1:]) // a1[0] == s[1]
|
||||||
a2 := ([2]byte)(s) // a2[0] == s[0]
|
a2 := [2]byte(s) // a2[0] == s[0]
|
||||||
a4 := ([4]byte)(s) // panics: len([4]byte) > len(s)
|
a4 := [4]byte(s) // panics: len([4]byte) > len(s)
|
||||||
|
|
||||||
s0 := (*[0]byte)(s) // s0 != nil
|
s0 := (*[0]byte)(s) // s0 != nil
|
||||||
s1 := (*[1]byte)(s[1:]) // &s1[0] == &s[1]
|
s1 := (*[1]byte)(s[1:]) // &s1[0] == &s[1]
|
||||||
|
|
@ -5553,8 +5553,9 @@ s2 := (*[2]byte)(s) // &s2[0] == &s[0]
|
||||||
s4 := (*[4]byte)(s) // panics: len([4]byte) > len(s)
|
s4 := (*[4]byte)(s) // panics: len([4]byte) > len(s)
|
||||||
|
|
||||||
var t []string
|
var t []string
|
||||||
t0 := (*[0]string)(t) // t0 == nil
|
t0 := [0]string(t) // ok for nil slice t
|
||||||
t1 := (*[1]string)(t) // panics: len([1]string) > len(t)
|
t1 := (*[0]string)(t) // t1 == nil
|
||||||
|
t2 := (*[1]string)(t) // panics: len([1]string) > len(t)
|
||||||
|
|
||||||
u := make([]byte, 0)
|
u := make([]byte, 0)
|
||||||
u0 := (*[0]byte)(u) // u0 != nil
|
u0 := (*[0]byte)(u) // u0 != nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue