I am working through the exercises in the Go tour and I have hit a snag that I can't figure out.
I'm doing Exercise: Slices
and I am getting this error:
256 x 256
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.Pic(0x100, 0x100)
/tmp/sandbox1628012103/prog.go:14 +0xcf
golang.org/x/tour/pic.Show(0xc0000001a0)
/tmp/gopath962180923/pkg/mod/golang.org/x/[email protected]/pic/pic.go:32 +0x28
main.main()
/tmp/sandbox1628012103/prog.go:25 +0x25
Here is my code:
package main
import (
"fmt"
"golang.org/x/tour/pic"
)
func Pic(dx, dy int) [][]uint8 {
fmt.Printf("%d x %d\n\n", dx, dy)
pixels := make([][]uint8, 0, dy)
for y := 0; y < dy; y++ {
pixels[y] = make([]uint8, 0, dx)
for x := 0; x < dx; x++ {
pixels[y][x] = uint8(x * y)
}
}
return pixels
}
func main() {
pic.Show(Pic)
}
Slices
For a string, array, pointer to array, or slice a, the primary expression
a[low : high]
constructs a substring or slice. The index expressions low and high select which elements appear in the result. The result has indexes starting at 0 and length equal to high - low.
For arrays or strings, the indexes low and high must satisfy 0 <= low <= high <= length; for slices, the upper bound is the capacity rather than the length.
Indexes
A primary expression of the form
a[x]
denotes the element of the array, slice, string or map a indexed by x. The value x is called the index or map key, respectively. The following rules apply:
For a of type A or *A where A is an array type, or for a of type S where S is a slice type:
x must be an integer value and 0 <= x < len(a) a[x] is the array element at index x and the type of a[x] is the element type of A if a is nil or if the index x is out of range, a run-time panic occurs
Making slices, maps and channels
make(T, n) slice slice of type T with length n and capacity n make(T, n, m) slice slice of type T with length n and capacity m
y must be an integer value and 0 <= y < len(pixel[]uint8). x must be an integer value and 0 <= x < len(pixel[][]uint8). For example,
package main
import "tour/pic"
func Pic(dx, dy int) [][]uint8 {
pixels := make([][]uint8, dy)
for y := 0; y < dy; y++ {
pixels[y] = make([]uint8, dx)
for x := 0; x < dx; x++ {
pixels[y][x] = uint8(x * y)
}
}
return pixels
}
func main() {
pic.Show(Pic)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With