3 回答
TA贡献1786条经验 获得超13个赞
当您尝试分配一个类型不能为常量的常量(例如,Regexp)时,就会发生这种情况。只有基本类型 like int,string等可以是常量。有关更多详细信息,请参见此处。
例子:
pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
// which translates to:
const pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
您必须将其声明为 avar才能正常工作:
var pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
另外,我通常会放一个注释说变量被视为常量:
var /* const */ pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
TA贡献1839条经验 获得超15个赞
错误很明显。如果您尝试在全球范围内执行此操作...
不要这样做:
const pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
而是这样做:
var pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)
或者,如果您真的希望模式保持不变:
const pattern = `^[A-Za-z0-9_\.]+` var alphaNum = regexp.MustCompile(pattern)
TA贡献1816条经验 获得超4个赞
在 Go 声明上下文中,使用简单的赋值=创建一个常量,而不是变量。(在声明之外,它是对必须已经存在的变量的赋值。)
但是一个常量初始化必须只包含常量——而不是像这样的调用regexp.MustCompile()——所以在这种情况下pattern 不能是一个常量,即使你以后不打算改变它的值。(事实上,即使你可以在不调用任何东西的情况下以某种方式初始化它,aRegexp也不能是 Go 中的常量;只有基本类型可以。)
var这意味着您需要通过将其放在语句中或在函数中声明它来使其成为变量,:=而不是=:
var (
pattern = ...
)
或者
var pattern = ...
或者
func something() {
pattern := ...
}
- 3 回答
- 0 关注
- 204 浏览
添加回答
举报