尝试了解如何从int参数建立数组

时间:2018-11-28 22:00:53

标签: go

全部:

当我尝试遵循golang的“围棋之旅”时:

Exercise: Slices

我的代码是这样的:

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

我遇到了类似的错误:

{{1}}

我刚开始使用Go,我想知道这个错误是什么意思,如果我想先构建一个数组(除了使用make()来构建slice之外),如何传递数组的长度?

2 个答案:

答案 0 :(得分:2)

错误

错误来自尝试从变量定义常量。在Go中,常量必须定义为从其他常量构建的文字或表达式。 xy的定义取决于Pic函数的输入。通常,常量是在编译时定义的。

例如,在Go中可以满足以下要求:

const w = 100
const x = 200
const y = w + x
const z = x + y + 300

但是以下不是:

var x = 100
const y = x + 10

第二个示例实质上就是代码中发生的事情,因为dxdy取决于Pic函数的输入。

如果您来自JavaScript(它也带有const关键字),这可能看起来很奇怪。在JavaScript中,常量基本上只是一个在声明后不能更改的变量。在Go中,常量比在JS中更常量。

在Go中查看有关此常量的更多信息:https://blog.golang.org/constants

创建阵列

数组大小与Go中的常量值具有相似的约束。在此示例中,如果您尝试将数组的大小设置为等于dxdy,则会出现错误:

  

非常数数组绑定dx

因此,在此示例中,您将必须使用切片。最简单的方法是使用长度dy来定义您的Slice,例如:

pic := make([][]uint8, dy)

答案 1 :(得分: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