前言

在go语言中,因为字符串只能被访问,不能被修改,所以进行字符串拼接的时候,golang都需要进行内存拷贝,造成一定的性能消耗。

方式1:操作符 +

特点:简单,可读性良好。每次拼接都会产生内存拷贝,性能一般。仅适用于字符串类型的变量。

示例代码:

str1 := "hello "
str2 := "world"
fmt.Println(str1 + str2) // hello world

方式2:strings.Join

特点:只能用于拼接字符串类型的切片。

示例:

slice1 := []string{"a","b","c"}
fmt.Println(strings.Join(slice1," ")) // a b c
fmt.Println(strings.Join(slice1,"")) // abc

方式3:fmt.Sprint

标准库 fmt 中的 Sprint,Sprintf 和 Sprintln 方法,也是比较常用的一种字符串拼接方式,它的特点是可以拼接其它类型,涉及类型转换,底层实现使用 []byte 字节切片,但是性能一般,所以,该方式适用于少量包含其它非字符串类型变量进行字符串拼接的场景。

示例:

str1 := "hello "
str2 := "world"
str4 := fmt.Sprint(str1,str2)
fmt.Println(str4)
str5 := fmt.Sprintf("name is %s, and age is %d \n",str2, 17)
fmt.Println(str5)

方式4:bytes.Buffer类型

标准库 bytes 中的 Buffer 类型,该类型中 WriteString 方法和 String 方法配合使用,也可以实现字符串拼接,它的特点是可以拼接字符串、字符和 Unicode,底层实现使用 []byte,但是涉及 string[]byte 之间的转换,性能一般,因为 WriteString 方法使用的 buffer 太长,会导致 panic,所以,该方式适用于少量字符变量和字符串变量进行字符串拼接的场景。

示例代码:

import "bytes"

var b bytes.Buffer
b.WriteString("My ")
b.WriteString("name ")
b.WriteString("is ")
b.WriteString("Bob.")
str6 := b.String()
fmt.Println(str6) // My name is Bob.

方式5:strings.Builder 类型

标准库 strings 中的 Builder 类型,该类型中 WriteString 方法和 String 方法配合使用,也可以实现字符串拼接,使用方式和 bytes.Buffer 相同,可以拼接字符串、字符和 Unicode,也会涉及 string[]byte 之间的转换,但是,它使用 unsafe.Pointer 优化了 string[]byte 之间的转换,所以,在大量字符串拼接的场景,推荐使用该种方式。

示例代码:

var c strings.Builder
c.WriteString("My ")
c.WriteString("name ")
c.WriteString("is ")
c.WriteString("Hanlei.")
str7 := c.String()
fmt.Println(str7) // My name is Hanlei.

[golang]字符串拼接的更多相关文章

  1. [Golang]字符串拼接方式的性能分析

    本文100%由本人(Haoxiang Ma)原创,如需转载请注明出处. 本文写于2019/02/16,基于Go 1.11.至于其他版本的Go SDK,如有出入请自行查阅其他资料. Overview 写 ...

  2. golang字符串拼接

    四种拼接方案: 1,直接用 += 操作符, 直接将多个字符串拼接. 最直观的方法, 不过当数据量非常大时用这种拼接访求是非常低效的. 2,直接用 + 操作符,这个和+=其实一个意思了. 3,用字符串切 ...

  3. golang字符串拼接性能对比

    对比 +(运算符).strings.Join.sprintf.bytes.Buffer对字符串拼接的性能 package main import ( "bytes" "f ...

  4. golang的字符串拼接

    常用拼接方法 字符串拼接在日常开发中是很常见的需求,目前有两种普遍做法: 一种是直接用 += 来拼接 s1 := "Hello" s2 := "World" s ...

  5. golang中的字符串拼接

    go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下 常用的字符串拼接方法 1.最常用的方法肯定是 + 连接两个字符串.这与python类似,不过由于golang中的字符串是不可变的类型,因此用 ...

  6. Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740

    Different ways to concatenate two strings in Golang - GeeksforGeeks https://www.geeksforgeeks.org/di ...

  7. GO语言的进阶之路-Golang字符串处理以及文件操作

    GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...

  8. golang 字符串与整数, 布尔转换 strconv

    strconv 是golang对于字符串和基本数据类型之间的转换字符串转整数testStr := "1000" testInt, err := strconv.Atoi(testS ...

  9. SQL中字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

  10. StringBuilder(字符串拼接类)

    StringBuilder是在using System.Text命名空间下的一个成员. 在做字符串拼接的时候,因为字符串是引用类型,新的字符串是会再内存中创建的,所以用+号拼接字符串是比较耗效率的. ...

随机推荐

  1. Xposed框架关于无法在模拟器中下载和激活的问题

    开头 最近xposed不知道出了什么问题,导致安装的时候一直在失败,所以记录下网上参考到的并用于实践中 安装软件 1.模拟器 逍遥游模拟器 安卓7.1 版本.下载地址为: https://www.52 ...

  2. 2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

    2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一.请问部署在k3s中,yaml如何写? 答案2023-01-13: yaml如下: apiV ...

  3. 2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc“,s2=“123“,s3=“12ab3c“,应该返回true,因为s3去掉12

    2021-06-19:交错字符串. 有三个字符串s1,s2,s3.判断s3是否由s1和s2交错组成的.比如s1="abc",s2="123",s3=" ...

  4. 2021-10-31:移动零。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]。输出: [1,3,12,0,0]。说

    2021-10-31:移动零.给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序.示例:输入: [0,1,0,3,12].输出: [1,3,12,0,0].说 ...

  5. for循环原理补充、生成器对象、yield冷门用法、生成器表达式的面试题、常见内置函数

    目录 一.for循环原理补充 二.生成器对象 (1).自定义生成器对标range功能(一个参数 两个参数 三个参数 迭代器对象) 三.yield冷门用法 (1).yield与return的对比 四.生 ...

  6. 【工作随手记】deaklock排查

    生产环境当中还没真正遇到过死锁的问题.有些疑似死锁的问题,后来经过排查也只是其它问题导致的.所以通过jstack到底怎样排查死锁问题有点疏忽了.这里作个记录. 模拟一个死锁 顺便复习一下. 死锁的产生 ...

  7. 代码随想录算法训练营Day51 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day51 动态规划| 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳买 ...

  8. Python潮流周刊#3:PyPI 的安全问题

    你好,我是豌豆花下猫.这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明.(标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.掌握Py ...

  9. 详解RocketMQ 顺序消费机制

    摘要:顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费. 本文分享自华为云社区<RocketMQ 顺序 ...

  10. 00.XML入门

    0.了解XML Extensible Markup Language 可扩展标记语言 申明信息不算元素,左图中book为根元素,根元素有且仅有一个; 1.初识XML 1.3用IDE创建xml(以ecl ...