以下代码错误,索引超出范围。我尝试将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)
}

最佳答案

你不知道Go Tour程序会将Pic测试值传递给您的程序。您的问题出在您的代码中:panic: runtime error: index out of range[][]uint8{}[]uint8{}分配零个y和零个x slice元素。使用make分配您的yx slice 。例如,

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

关于go - 前往游览#18。如何将整数传递给Pic?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44230022/

10-15 23:04