Go 语言:类型 XXX 不是表达式

Sah*_*and 4 go slice

我写了一个函数:

func Pic(dx, dy int) [][]uint8 {
    type matrix [][]uint8 

    for i := 0; i < dx; i++ { // fills up the matrix with z's in their right places.
        for j := 0; j < dy; j++ {
            matrix[i][j] = Z(i,j)
        }
    }

    return matrix
}
Run Code Online (Sandbox Code Playgroud)

这应该用每个 x 和 y 值的 z 值填充矩阵并返回它。由于我希望根据 Pic 函数的参数为​​矩阵设置不同的维度,因此我在第 2 行创建了一个切片。然后在我的 for 循环中填充矩阵。

运行此代码时出现错误:type matrix is not an expression对于该matrix[i][j] = Z(i,j)行。我究竟做错了什么?matrix[i][j] 应该计算为表达式吗?为什么要在那里放东西(它现在是空的/不存在的!)?

Jim*_*imB 5

您声明matrix为类型,但将其用作变量。

尝试:

var matrix [][]uint8
Run Code Online (Sandbox Code Playgroud)


Mat*_*kin 4

虽然您可以使用var matrix [][]uint8,但我建议使用内置函数,因为您知道外部切片和内部切片make所需的长度\xe2\x80\x94 。effective Go二维切片部分给出了一个使用分配二维切片的示例。下面是您的函数的示例。dxdymakePic

\n\n
func Pic(dx, dy int) [][]uint8 {\n    matrix := make([][]uint8, dx)\n\n    for i := 0; i < dx; i++ {\n        matrix[i] = make([]uint8, dy)\n        for j := 0; j < dy; j++ {\n            matrix[i][j] = Z(i, j)\n        }\n    }\n    return matrix\n}\n
Run Code Online (Sandbox Code Playgroud)\n