1. 字符串构建
go 可以通过三种方式构建字符串
- +符号
- fmt.Sprintf 函数
- strings.Builder
这里做个测试,看三种方式的效率
func main() {
// string test
username := "admin"
age := 30
address := "china"
phone := "13112345678"
startTime := time.Now()
handleTest(100000, func() {
str := "username:" + username + " age:" + strconv.Itoa(age) + " address:" + address + " phone:" + phone
_ = str
})
endTime := time.Now()
fmt.Println("+ time diff:", endTime.Sub(startTime))
startTime = time.Now()
handleTest(100000, func() {
str := fmt.Sprintf("username:%v age:%v address:%v phone:%v", username, age, address, phone)
_ = str
})
endTime = time.Now()
fmt.Println("sprintf time diff:", endTime.Sub(startTime))
startTime = time.Now()
var builder strings.Builder
handleTest(100000, func() {
builder.WriteString("username:")
builder.WriteString(username)
builder.WriteString(" age:")
builder.WriteString(strconv.Itoa(age))
builder.WriteString(" address:")
builder.WriteString(address)
builder.WriteString(" phone:")
builder.WriteString(phone)
str := builder.String()
_ = str
builder.Reset()
})
endTime = time.Now()
fmt.Println("builder time diff:", endTime.Sub(startTime))
}
func handleTest(count int32, handle func()) {
i := 0
for i < int(count) {
handle()
i++
}
}
// + time diff: 9.2515ms
// sprintf time diff: 28.398ms
// builder time diff: 12.9933ms
这里+号效率最高,但是这里字符串比较短,可能strings.builder 的内部缓存优势没有发挥出来,
strings.builder 是很高效的构建字符串的工具,Sprintf 更加好用。
2. 常用字符串操作
strings 包中有很多字符串常见操作,如下:
- strings.Contains 是否包含
- strings.Count 统计次数
- strings.Split 分割字符串
- strings.HasPrefix 是否包含前缀
- strings.HasSuffix 是否包含后缀
- strings.Index 查找子串位置
- strings.Replace 子串替换
- strings.ToLower 转换成小写
- strings.ToUpper 转换成大写
- strings.Trim 消除前后特殊字符