在 Go 语言开发中,字符串处理几乎无处不在,例如:
- 文本解析
- 数据清洗
- Web 开发
- 日志处理
- 爬虫程序
- CLI 工具
Go 标准库中的 strings 包提供了一整套 高效、简单、常用的字符串处理函数。掌握 strings 包,可以极大提升 Go 开发效率。
本文将系统介绍 strings 包的常用函数、使用场景以及实战案例。
一、strings 包简介
strings 是 Go 标准库中用于 字符串操作 的核心工具库。
主要功能包括:
字符串查找 字符串替换 字符串分割 字符串拼接 字符串判断 大小写转换 字符串构建
导入方式:
import "strings"
二、字符串判断函数
1 判断是否包含字符串
使用 strings.Contains
示例:
package main
import (
"fmt"
"strings"
)
func main() {
text := "hello golang"
fmt.Println(strings.Contains(text, "go"))
}
输出
true
常见用途:
日志过滤 关键词检测 文本搜索
2 判断前缀
使用 strings.HasPrefix
示例:
str := "image.png"
fmt.Println(strings.HasPrefix(str, "image"))
输出
true
常见用途:
文件类型判断 URL 路径检测
3 判断后缀
使用 strings.HasSuffix
示例:
name := "photo.jpg"
fmt.Println(strings.HasSuffix(name, ".jpg"))
输出
true
常用于:
文件格式检测 日志文件判断
三、字符串查找
1 查找字符串位置
使用 strings.Index
示例:
text := "hello world"
fmt.Println(strings.Index(text, "world"))
输出
6
返回:
字符串第一次出现的位置
如果不存在返回 -1
2 最后一次出现位置
使用 strings.LastIndex
示例:
text := "go go golang"
fmt.Println(strings.LastIndex(text, "go"))
输出
6
适用于:
路径处理 日志解析
四、字符串分割
1 Split
最常用字符串分割函数。
示例:
str := "apple,banana,orange"
list := strings.Split(str, ",")
fmt.Println(list)
输出
[apple banana orange]
常用于:
CSV解析 配置解析 日志处理
2 SplitN
限制分割次数。
示例:
str := "a:b:c:d"
result := strings.SplitN(str, ":", 2)
fmt.Println(result)
输出
[a b:c:d]
适合解析:
key:value HTTP header
五、字符串替换
使用 strings.Replace
示例:
text := "hello world world"
result := strings.Replace(text, "world", "go", 1)
fmt.Println(result)
输出
hello go world
参数说明:
old 原字符串
new 新字符串
n 替换次数
如果替换全部:
n = -1
示例:
strings.Replace(text, "world", "go", -1)
六、字符串去除空格
Trim
去除两边字符。
示例:
str := " hello "
fmt.Println(strings.TrimSpace(str))
输出
hello
常用于:
用户输入清理 数据清洗
TrimPrefix
删除前缀。
str := "https://example.com"
fmt.Println(strings.TrimPrefix(str, "https://"))
输出
example.com
TrimSuffix
删除后缀。
name := "photo.jpg"
fmt.Println(strings.TrimSuffix(name, ".jpg"))
输出
photo
七、字符串大小写转换
转大写
strings.ToUpper("golang")
输出
GOLANG
转小写
strings.ToLower("GoLang")
输出
golang
常用于:
搜索统一格式 数据库存储
八、字符串拼接
Join
用于拼接字符串数组。
示例:
list := []string{"go", "python", "java"}
fmt.Println(strings.Join(list, ","))
输出
go,python,java
常用于:
生成 CSV 日志输出
九、高性能字符串构建
在循环拼接字符串时,推荐使用 strings.Builder。
示例:
package main
import (
"fmt"
"strings"
)
func main() {
var builder strings.Builder
builder.WriteString("hello ")
builder.WriteString("golang")
fmt.Println(builder.String())
}
输出
hello golang
优点:
减少内存分配 性能更高
适合:
HTML生成 日志拼接 大文本生成
十、Repeat 重复字符串
示例:
fmt.Println(strings.Repeat("go ", 3))
输出
go go go
用途:
文本生成 测试数据
十一、Fields 按空格分割
示例:
text := "go is a powerful language"
list := strings.Fields(text)
fmt.Println(list)
输出
[go is a powerful language]
自动识别空格。
适合解析:
日志 命令行输入
十二、实际开发案例
案例1 解析文件扩展名
func getExt(name string) string {
parts := strings.Split(name, ".")
return parts[len(parts)-1]
}
示例:
photo.jpg
返回:
jpg
案例2 过滤 URL 前缀
func cleanURL(url string) string {
url = strings.TrimPrefix(url, "http://")
url = strings.TrimPrefix(url, "https://")
return url
}
输入:
https://google.com
输出:
google.com
案例3 批量替换文本
func cleanText(text string) string {
text = strings.Replace(text, "\n", "", -1)
text = strings.Replace(text, "\t", "", -1)
return text
}
十三、strings 与 bytes 区别
Go 中有两个类似库:
strings
bytes
区别:
| 包 | 处理类型 |
|---|---|
| strings | string |
| bytes | []byte |
示例:
字符串:
strings.Contains("hello", "he")
字节:
bytes.Contains([]byte("hello"), []byte("he"))
如果处理:
文件数据 网络数据
通常使用 bytes。
十四、开发建议
实际开发中推荐:
字符串判断
Contains
HasPrefix
HasSuffix
字符串处理
Split
Join
Replace
Trim
性能优化
strings.Builder
这样可以保证代码:
可读性好 性能高 维护简单
十五、总结
strings 是 Go 语言最常用的标准库之一,几乎所有项目都会用到。
核心功能包括:
字符串判断
Contains
HasPrefix
HasSuffix
字符串查找
Index
LastIndex
字符串处理
Split
Join
Replace
Trim
字符串构建
strings.Builder
熟练掌握 strings 包,可以极大提升 Go 开发效率,尤其是在:日志系统、Web开发、爬虫程序、CLI工具、文本处理程序等场景中。