前往游览#18。 如何将整数传递给Pic?

The following code errors with index out of range. I tried modifying main to pic.Show(Pic(500, 500)) but that changes the argument from function to the return type and it fails to compile. How do I pass in integers if the pic.Show is expecting a function as an argument.

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)
}

You don't. The Go Tour program will pass Pic test values to your program. Your problem is in your code: panic: runtime error: index out of range. [][]uint8{} and []uint8{} allocate zero y and zero x slice elements. Use make to allocate your y and x slices. For example,

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)
}

Reference: Making slices, maps and channels, The Go Programming Language Specification