请问Golang中如何定义常量数组

比如像这样定义: const list []string = []string{ "str1", "str2", "str3", }

可是编译器会报错的,试了很多其他的办法,但是没有成功的,大家有什么号办法吗

共 11 个回复


jimmykuu

既然编译器都报错了,那就没办法了,此路不通。

# 0

jemygraw

首先,const是编译的时候能够确定值的。你数组或是切片无法达到这个要求的。

# 1

jemygraw

这个时候,获取你需要的是这样的代码:

package main

import (
    "fmt"
)

func main() {
    var list = []string{"str1", "str2", "str3", "str4"}
    fmt.Println(list)
}
# 2

jikai507

嗯。。。果断用var了。。 但是有点强迫症啊 因为是要用到常量的地方

# 3

cb741044015

常量和C#中的概念相同,在编译期被创建。因为在编译期必须确定其值,因此在声明常量时有一些限制。

  • 其类型必须是:数值、字符串、布尔值
  • 表达式必须是在编译期可计算的
  • 声明常量的同时必须进行初始化,其值不可再次修改
# 4

name5566

类似的问题,一个函数返回一个结构体指针,我希望外部不能改变这个结构体的内容,是不是没法做?

# 5

jikai507

回复5楼,我的实例代码和这三条没什么出入吧

# 6

wangxufire

@jikai507 这么写后面的代码是可以改变list 的值的吧 我希望list是final的

# 7

stevewang

go里没有常量数组这种概念。

# 8

nuokesasi

go语言基础啊,go存储在常量中的数据类型只可以是布尔型,数字型(整型,浮点型和复数),字符串型

# 9

bittoy

var role_array [6][6]int = Role_role()
func Role_role() [6][6]int {
    return [6][6]int{
        {1, 1, 1, 1, 1, 1},
        {0, 20, 0, 0, 0, 0},
        {0, 0, 20, 0, 0, 0},
        {0, 10, 10, 20, 0, 0},
        {0, 10, 10, 10, 20, 0},
        {1, 5, 5, 5, 5, 20},
    }
}
# 10