İçeriğe geç

Döngüde Regex Yeniden Derleme (ARCH5073)

Anahtar go.performance.regex-recompiled-in-loop · Önem warning · Kategori performance

regexp.MustCompile döngü içinde çağrıldığında her yinelemede aynı deseni yeniden derler; bu pahalıdır. Deseni döngü dışında bir kez derleyin.

func filter(lines []string) []string {
var out []string
for _, line := range lines {
re := regexp.MustCompile(`^\d+`)
if re.MatchString(line) {
out = append(out, line)
}
}
return out
}
var numRe = regexp.MustCompile(`^\d+`)
func filter(lines []string) []string {
var out []string
for _, line := range lines {
if numRe.MatchString(line) {
out = append(out, line)
}
}
return out
}

Regex’i döngü dışında (idealde paket düzeyinde bir var) bir kez derleyin.