为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
智慧大石 2023-05-15 10:10:16
全部:当我尝试跟随 golang 的 Go 之旅时:练习:切片我的代码是这样的:package mainimport "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 constantprog.go:7:8: const initializer dy is not a constant我是 Go 的新手,我想知道这个错误是什么意思,如果我想先构建一个数组(除了使用 make() 构建切片之外),我该如何传递数组的长度?
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

错误


错误来自于尝试从变量定义常量。在 Go 中,常量必须定义为从其他常量构建的文字或表达式。根据函数的输入,您的x和定义不同。通常,常量是在编译时定义的。yPic


例如,以下内容在 Go 中是可以的:


const w = 100

const x = 200

const y = w + x

const z = x + y + 300

但以下不是:


var x = 100

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


查看完整回答
反对 回复 2023-05-15
?
冉冉说

TA贡献1877条经验 获得超1个赞

没有常数值。例如,


package main


import "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


查看完整回答
反对 回复 2023-05-15
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信