Go 语言至今都不允许当全局变量的初始值是函数返回值时,全局变量的类型被定义成带 const
修饰。比如下面这样的语句不被允许:
1 2 |
|
真的很迷,可能 Go 语言认为 const 必须全宇宙级别的不变,不能是程序初始化来的。
这就导致类似 goldmark 里面像下面这种看起来像常量的全局变量,实际上,并不是:
1 2 3 4 |
|
我一不小心写了个 switch-case 语句,包含了重复的 case 值,竟然不报错:
1 2 3 4 5 6 |
|
看着是有那么点儿怪怪的吧?
还好我有习惯是会在提交代码前会再 review 一次,不是简单地 git add .
。(不点名批评前上司)
而恰好这两个 case 的单测也不冲突(case 里面有条件判断),导致还真就没发现问题。
然后我就跑去看了看语言规范:
Implementation restriction: A compiler may disallow multiple case expressions evaluating to the same constant. For instance, the current compilers disallow duplicate integer, floating point, or string constants in case expressions.
没毛病,make sense。只是……啥时候让已初始化的全局变量可以定义成 const?