Go字符串不可变,常用操作包括:拼接优先用strings.Builder或fmt.Sprintf;切割用strings.Split等函数;格式化用fmt.Sprintf或text/template;注意UTF-8编码与Unicode处理。

Go语言处理字符串既简洁又高效,但要注意字符串在Go中是不可变的(immutable),每次操作都会生成新字符串。掌握拼接、切割和格式化这三类常用操作,能帮你写出更清晰、性能更好的代码。
字符串拼接:优先用 strings.Builder 或 fmt.Sprintf
直接用 + 拼接小量字符串没问题,但循环中频繁拼接会大量分配内存,影响性能。
- 对少量固定字符串:用 + 最直观,例如
"Hello" + " " + "World" - 对动态或循环拼接:推荐 strings.Builder,它底层复用字节切片,零拷贝、无GC压力
- 需要类型转换或占位符时:用 fmt.Sprintf(适合调试或低频场景),但注意它有格式解析开销
示例(Builder):
var b strings.Builderb.Grow(64) // 预分配容量避免多次扩容
b.WriteString("name:")
b.WriteString(name)
b.WriteString(";age:")
b.WriteString(strconv.Itoa(age))
result := b.String()
字符串切割:strings 包是主力,按需选函数
Go标准库 strings 提供了丰富且语义明确的切割方法,不用自己写切片逻辑。
立即学习“go语言免费学习笔记(深入)”;
-
strings.Split(s, sep):按分隔符切为 []string,如
strings.Split("a,b,c", ",") → ["a","b","c"] - strings.Fields(s):按任意空白字符(空格、制表、换行)分割,自动忽略连续空白和首尾空白
- strings.TrimPrefix / TrimSuffix:安全去前缀/后缀,不匹配则原样返回,比手动切片更健壮
- 需要保留分隔符?用 strings.SplitN(s, sep, n) 或正则 regexp.Split
字符串格式化:fmt 是核心,text/template 更灵活
日常开发中,fmt 系列函数覆盖绝大多数需求;复杂模板(如生成HTML、配置文件)建议上 text/template。
- fmt.Sprintf("%s: %d", name, age):最常用,支持动词如 %v(默认)、%q(带引号)、%x(十六进制)等
- fmt.Sprintln 自动加空格和换行,适合日志拼接
- 想控制精度或对齐?用
%6.2f(宽度6、小数点后2位)、%-10s(左对齐、最小宽10) - 结构体输出可配合 String() string 方法自定义,让 fmt 输出更友好
额外提醒:别忽略编码与 Unicode
Go字符串底层是 UTF-8 字节序列,len(s) 返回字节数而非字符数。中文、emoji 等可能占多个字节。
- 要获取真实“字符个数”,用 utf8.RuneCountInString(s)
- 按字符截取?用 for range s 迭代 rune,或 []rune(s) 转换后再切(注意内存开销)
- 大小写转换、比较请用 strings.ToXXX 系列(它们已正确处理 Unicode)










