首页 > 其他分享 >[golang]字符串拼接

[golang]字符串拼接

时间:2022-11-26 00:11:29浏览次数:35  
标签:WriteString fmt golang Println 拼接 字符串 strings

前言

在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.

标签:WriteString,fmt,golang,Println,拼接,字符串,strings
From: https://www.cnblogs.com/XY-Heruo/p/16926736.html

相关文章

  • 基于Docker的Golang开发
    一、Docker用于开发Docker不仅用于部署,它还可以用于开发。1、为什么要在开发中使用Docker主要有以下几个原因。1)一致的开发环境使用Docker,可以保证整个研发团队使用一致的开......
  • Golang中一个不错的处理 JSON 的库 go-dproxy
    国庆七天,你是吃多了,还是睡多了?放假七天转眼即逝,接下来的七天可能你又觉得会很漫才。言归正传。Golang虽然自己就带了JSON(encoding/json)处理的库,也有第三方的simplejs......
  • C++的字符串流
    sstream使用,注意clear和str("")#include<iostream>#include<sstream>#include<string>usingnamespacestd;intmain(){stringstreamss;ss.put......
  • NEFU锐格作业一[数组-字符串]
    ​​推荐:NEFU大一下C语言锐格实验与作业参考程序目录​​文章目录​​NEFU锐格作业一[数组-字符串]​​​​知识点​​​​题目​​​​7132​​​​7124​​​​7150​​​......
  • [DP 字符串 计数去重]L3-020 至多删三个字符
    [DP字符串]L3-020至多删三个字符题目思路状态表示集合属性:count(不包含重复)状态计算:删除第i个或者不删除第i个这题比较恶心的地方在于去重aacdbb删掉最后一个b和删除......
  • mybatis xml文件中用 if 标签判断字符串是否相等
    方法一:<iftest="delFlag=='2'.toString()">a.del_flag=#{delFlag}</if> 方法二:<iftest='delFlag=="2"'>a.del_flag=#{delFlag}</if> ......
  • 生成十位数的字符串
    @Test publicvoidtest1(){ System.out.println(getRandomString(10)); } publicstaticStringgetRandomString(intlength){ Stringstr="abcdefghijklm......
  • 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明​   本章节主要为大家介绍在游戏开发过程中经常遇到的两个问题;   1.解决滚屏背景或拼接地图有黑边!   ......
  • Python入门(4)——最全的字符串操作
    修改字符串大小写title():把字符串中每个单词首字母改为大写。upper():把字符串中所有字符改为大写。lower():把字符串中所有字符改为小写。>>>'theintroductiontopython'.......
  • PHP处理 字符串个数(压缩处理)方法
    不说了,都是泪,直接上代码...$str='aaabbccqqwwe';//字符串示例$strRecord=[];//把出现过的字符记录在此数组中,如果记录有,则不记录,$new_str='';//最后......