Go学习:常量报错 const initializer is not a constant

1 篇文章 0 订阅

Go的常量const是属于编译时期的常量,即在编译时期就可以完全确定取值的常量。只支持数字,字符串和布尔,及上述类型的表达式。而切片,数组,正则表达式等等需要在运行时分配空间和执行若干运算才能赋值的变量则不能用作常量。这一点和Java,Nodejs(javascript)不同。Java的final和Nodejs的const代表的是一次性赋值的变量,本质上还是变量,只是不允许后续再做修改,任意类型都可以,可以在运行时赋值。

可以这样类比:Go的常量对应于C#的const,而Java,Nodejs的常量对应于C#的readonly。

package main

import(
	"regexp"
)

//正确
const R1 = 1
const R2 = 1.02
const R3 = 1 * 24 * 1.03
const R4 = "hello" + " world"
const R5 = true

//错误: const initializer ... is not a constant
const R6 = [5]int{1,2,3,4,5}
const R7 = make([]int,5)
const R8 = regexp.MustCompile(`^[a-zA-Z0-9_]*$`)

func main(){

}

编译报错:

./checkconst.go:15:7: const initializer [5]int literal is not a constant
./checkconst.go:16:7: const initializer make([]int, 5) is not a constant
./checkconst.go:17:7: const initializer regexp.MustCompile("^[a-zA-Z0-9_]*$") is not a constant

 

参考文献:

《Runtime And Compiletime Constants In C#》

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值