以下代码错误,索引超出范围。我尝试将main修改为 pic.Show(Pic(500,500))但是它将参数从函数更改为返回类型,并且无法编译。如果pic.Show期望函数作为参数,我如何传入整数。
package main
import "golang.org/x/tour/pic"
func Pic(dx, dy int) [][]uint8 {
mypic := [][]uint8{}
for y := 0; y < dy; y++ {
mypic[y] = []uint8{}
for x := 0; x < dx; x++ {
mypic[y][x] = uint8((x + y) / 2)
}
}
return mypic
}
func main() {
pic.Show(Pic)
}
答案 0 :(得分:1)
你没有。 Go Tour程序会将Pic
测试值传递给您的程序。您的问题出现在您的代码中:panic: runtime error: index out of range
。 [][]uint8{}
和[]uint8{}
分配零y
和零x
个切片元素。使用make
分配您的y
和x
切片。例如,
package main
import "golang.org/x/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) / 2)
}
}
return pixels
}
func main() {
pic.Show(Pic)
}
参考:Making slices, maps and channels, The Go Programming Language Specification