var slice = make([]b, 5, 10)
равно
var array [10]b
slice := array[:5]
Разница в том, что когда вы используете var slice = make([]b, 5, 10)
, вы не можете получить доступ к array
в slice
.slice := array[:5]
означает, что первый элемент slice
равен array[0]
, а длина slice
равна 5, что означает slice[0] == array[0], slice[1] == array[1], ... slice[4] == array[4]
.Потому что вы можете получить доступ только к индексу, который меньше длины (что означает 0 <= index < length
).Длина slice
равна 5, а длина array
равна 10, поэтому вы можете получить доступ к array[8]
(0 <= 8 <10), но не можете получить доступ к <code>slice[8] (8> 5).
Полный образец:
package main
import fmt "fmt"
func main(){
type b []int
var array [10]b
slice := array[:5]
// []
fmt.Printf("%d\n",slice[1])
// []
fmt.Printf("%d\n",array[8])
// panic: runtime error: index out of range
fmt.Printf("%d\n",slice[8])
}
Ссылка
- https://blog.golang.org/go-slices-usage-and-internals