go - Regex "is not a constant" compilation error

ID : 274361

viewed : 23

Tags : regexgoregex





Top 4 Answer for go - Regex "is not a constant" compilation error

vote vote

98

This happens when you're trying to assign to a constant that has a type that can't be constant (like for example, Regexp). Only basic types likes int, string, etc. can be constant. See here for more details.

Example:

pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) // which translates to: const pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) 

You have to declare it as a var for it to work:

var pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) 

In addition, I usually put a note to say that the variable is treated as a constant:

var /* const */ pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) 
vote vote

90

The error is pretty clear. If you are trying to do this globally...

Don't do:

const pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) 

Instead do:

var pattern = regexp.MustCompile(`^[A-Za-z0-9_\.]+`) 

Or if you really want the pattern in a constant:

const pattern = `^[A-Za-z0-9_\.]+` var alphaNum = regexp.MustCompile(pattern) 
vote vote

74

In Go declaration context, assignment with a simple = creates a constant, not a variable. (Outside of a declaration, it's an assignment to a variable that must already exist.)

But a constant initialization has to include only constants - not calls like regexp.MustCompile() - so pattern can't be a constant in this case, even if you don't plan on changing its value later. (In fact, even if you could somehow initialize it without calling anything, a Regexp can't be a constant in Go; only basic types can be.)

That means you need to make it a variable by either putting it inside a var statement or declaring it inside a function with := instead of =:

var (    pattern = ... ) 

or

var pattern = ... 

or

func something() {    pattern := ... } 
vote vote

66

Top 3 video Explaining go - Regex "is not a constant" compilation error







Related QUESTION?