为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式“不是常量”编译错误

正则表达式“不是常量”编译错误

Go
墨色风雨 2022-01-17 20:08:24
我正在尝试在 Go 中编写一个正则表达式来验证一个字符串是否只有字母数字、句点和下划线。但是,我遇到了一个我以前从未见过的错误,并且在谷歌搜索中没有成功。这是正则表达式:pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`)这是错误:const initializer regexp.MustCompile("^[A-Za-z0-9_\\.]+") is not a constant“不是常数”是什么意思,我该如何解决?
查看完整描述

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_\.]+`)


查看完整回答
反对 回复 2022-01-17
?
紫衣仙女

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)


查看完整回答
反对 回复 2022-01-17
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

在 Go 声明上下文中,使用简单的赋值=创建一个常量,而不是变量。(在声明之外,它是对必须已经存在的变量的赋值。)


但是一个常量初始化必须只包含常量——而不是像这样的调用regexp.MustCompile()——所以在这种情况下pattern 不能是一个常量,即使你以后不打算改变它的值。(事实上,即使你可以在不调用任何东西的情况下以某种方式初始化它,aRegexp也不能是 Go 中的常量;只有基本类型可以。)


var这意味着您需要通过将其放在语句中或在函数中声明它来使其成为变量,:=而不是=:


var (

   pattern = ...

)

或者


var pattern = ...

或者


func something() {

   pattern := ...

}


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信