猿问

尝试了解如何从 int params 构建数组

全部:

当我尝试跟随 golang 的 Go 之旅时:

练习:切片

我的代码是这样的:

package main


import "golang.org/x/tour/pic"


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

    const x = dx

    const y = dy

    pic := [y][x]uint8{};


    for r:=range pic {

        row := pic[r]

        for c := range row {

            row[c] = uint8(c*r) 

        }

    }


    return pic[:]

}


func main() {

    pic.Show(Pic)

}

我得到了这样的错误:


prog.go:6:8: const initializer dx is not a constant

prog.go:7:8: const initializer dy is not a constant

我是 Go 的新手,我想知道这个错误是什么意思,如果我想先构建一个数组(除了使用 make() 构建切片之外),我该如何传递数组的长度?


智慧大石
浏览 144回答 2
2回答

慕桂英546537

错误错误来自于尝试从变量定义常量。在 Go 中,常量必须定义为从其他常量构建的文字或表达式。根据函数的输入,您的x和定义不同。通常,常量是在编译时定义的。yPic例如,以下内容在 Go 中是可以的:const w = 100const x = 200const y = w + xconst z = x + y + 300但以下不是:var x = 100const y = x + 10第二个示例本质上是您的代码中发生的事情,并且dx根据函数dy的输入而有所不同Pic。如果您来自也有关键字的 JavaScript const,这可能看起来很奇怪。在 JavaScript 中,常量基本上只是一个在声明后无法更改的变量。在 Go 中,常量比在 JS 中更常量。查看这篇文章以了解有关 Go 中常量的更多信息: https: //blog.golang.org/constants创建阵列数组大小与 Go 中的常量值有类似的约束。在此示例中,如果您尝试将 Array 的大小设置为等于dxor dy,您将收到错误消息:非常量数组绑定 dx因此,您必须在本示例中使用 Slice。最简单的方法是定义您的 Slice 长度,dy例如:pic := make([][]uint8, dy)

冉冉说

没有常数值。例如,package mainimport "golang.org/x/tour/pic"func Pic(dx, dy int) [][]uint8 {    p := make([][]uint8, dy)    for x := range p {        p[x] = make([]uint8, dx)        for y := range p[x] {            p[x][y] = uint8(x * y)        }    }    return p}func main() {    pic.Show(Pic)}游乐场:https://play.golang.org/p/JQwGhfBth0o
随时随地看视频慕课网APP

相关分类

Go
我要回答