8. 字符串操作

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 消除前后特殊字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值