【golang】字符串的拼接

字符串的拼接一共有6种方式:

1、+
2、fmt.Sprintf    性能是最差的
3、bytes.Buffer
4、strings.Builder   性能是最好的
5、append
6、strings.Join

0、定义的变量

    age := 28
	name := "张三"
	address := "北京市海淀区"
	s2 := "2xyz"

方式1  +

    fmt.Println(s2 + s2)
	fmt.Println("111我的年纪是:"+strconv.Itoa(age), "我的姓名是:"+name, "我的地址是:"+address)

输出:

2xyz2xyz
111我的年纪是:28 我的姓名是:张三 我的地址是:北京市海淀区

方式2 fmt.Sprintf

    fmt.Printf("2年纪:%d,姓名:%s,地址为:%s\n", age, name, address)
	s := fmt.Sprintf("22年纪:%d,姓名:%s,地址为:%s\n", age, name, address)
	fmt.Println(s)

输出:

2年纪:28,姓名:张三,地址为:北京市海淀区
22年纪:28,姓名:张三,地址为:北京市海淀区

方式3  bytes.Buffer

底层实现和strings.Builder差不多,区别在于bytes.Buffer转化为字符串时需要重新申请一片空间来存放生成的字符串变量,性能仅次于strings.Builder

    buffer := bytes.Buffer{}
	buffer.WriteString("33年纪:")
	buffer.WriteString(strconv.Itoa(age))
	buffer.WriteString("姓名:")
	buffer.WriteString(name)
	buffer.WriteString("地址:")
	buffer.WriteString(address)
	bytes := make([]byte, buffer.Len())
	buffer.Read(bytes)
	fmt.Println(string(bytes))

输出:

33年纪:28姓名:张三地址:北京市海淀区

方式4  strings.Builder

底层存储用的是[]byte,每次分配内存的时候,支持预分配内存并且自动扩容

    build := strings.Builder{}
	build.WriteString("44年纪:")
	build.WriteString(strconv.Itoa(age))
	build.WriteString("姓名:")
	build.WriteString(name)
	build.WriteString("地址:")
	build.WriteString(address)
	fmt.Println(build.String())

输出:

44年纪:28姓名:张三地址:北京市海淀区
 

方式5 append

    s1 := []string{"1abcdef"}
	s3 := []byte{'1', '2', '5'}
	for _, v := range s1 {
		s3 = append(s3, v...) //这里不能追加字符,想追加字符的话,把单个的字符转化字符串
	}
	fmt.Printf("%s\n", s3)

输出:

1251abcdef
 

方式6 strings.Join

    str := []string{"6hello", "word", "!"}
	resulate := strings.Join(str, "->")
	fmt.Println(resulate)

输出:6hello->word->!

 总结:

性能比较:strings.Builder≈string.Join > bytes.Buffer > append> + > fmt.Sprintf
少量字符串拼接时,直接用+性能也是比较高的

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值