That's how spec defines slice expressions
For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range. For slices, the upper index bound is the slice capacity cap(a) rather than the length.
https://golang.org/ref/spec#Slice_expressions
And that's how index expressions for slices are defined
the index x is in range if 0 <= x < len(a), otherwise it is out of range
if x is out of range at run time, a run-time panic occurs
https://golang.org/ref/spec#Index_expressions
For your example:
v[1]
panics because it's our of range as per the definition above (because 1
does not qualify the 0 <= x < len(a)
reqirement)
v[1:]
runs fine because it's identical to v[1:len(v)]
and fits the if 0 <= low <= high <= cap(a)
requirement.