Go语言字符串替换核心是strings.Replace和strings.ReplaceAll,前者需指定次数,后者全量替换;均返回新字符串,原串不可变;简单场景用二者,复杂模式用regexp包。
Go语言中替换字符串内容,核心是使用 strings.Replace 或 strings.ReplaceAll 函数,关键在于理解参数含义、区分全量/局部替换、注意不可变性,以及处理特殊场景(如正则、大小写、多次替换)。
strings.Replace 需要指定最大替换次数,strings.ReplaceAll 则一次性替换全部匹配项。两者都返回新字符串,原字符串不变(Go 中 string 是不可变的)。
实际开发中常遇到这些需求,掌握对应写法可避免踩坑:
strings.ReplaceAll(s, " ", "_") 或 strings.ReplaceAll(s, "\t", " ")
strings.TrimPrefix/strings.TrimSuffix,比 Replace 更语义明确且高效strings.ReplaceAll(strings.ReplaceAll(s, "\n", " "), "\r", "")
strings.ToLower 或使用正则 regexp.ReplaceAllString
当替换模式不固定(如数字、邮箱、HTML 标签),标准 Replace 不够用,应切换到 regexp 包:
"regexp",编译正则表达式:r := regexp.MustCompile(`\d+`)
r.ReplaceAllString(s, "[num]")
r.ReplaceAllStringFunc(s, func(m string) string { return "[" + m + "]" })
几个容易忽略但影响逻辑正确性的细节:
F-8)基本上就这些。用好 Replace/ReplaceAll 能覆盖 90% 的字符串替换需求,复杂模式再交由正则处理,不复杂但容易忽略细节。