可以看出如果旧容量小于1024进行翻倍,否则扩展四分之一 。(2048 byte 后,申请策略的调整) 。
其次String()方法与Buffer的string方法也有明显区别 。Buffer的string是一种强转,我们知道在强转的时候是需要进行申请空间,并拷贝的 。而Builder只是指针的转换 。
这里我们解析一下 *(*string)(unsafe.Pointer(b.buf)) 这个语句的意思 。
先来了解下unsafe.Pointer 的用法 。
也就是说 , unsafe.Pointer 可以转换为任意类型 , 那么意味着 , 通过unsafe.Pointer媒介 , 程序绕过类型系统,进行地址转换而不是拷贝 。
即*A = Pointer = *B
就像上面例子一样,将字节数组转为unsafe.Pointer类型,再转为string类型,s和b中内容一样 , 修改b,s也变了,说明b和s是同一个地址 。但是对s重新赋值后,意味着s的地址指向了“WORLD”,它们所使用的内存空间不同了,所以s改变后,b并不会改变 。
所以他们的区别就在于 bytes.Buffer 是重新申请了一块空间,存放生成的string变量 , 而strings.Builder直接将底层的[]byte转换成了string类型返回了回来,去掉了申请空间的操作 。
Go中字符串的遍历首先说一下go中的字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列 。Go的字符串是由单个字节连接起来的 。Go语言的字符串的字节使用UTF-8编码标识Unicode文本 。
下面介绍字符串的三种遍历方式go语言填充字符串,根据实际情况选择即可 。
该遍历方式==缺点==:遍历是按照字节遍历go语言填充字符串,因此如果有中文等非英文字符,就会出现乱码,比如要遍历"abc北京"这个字符串,效果如下:
可见这不是go语言填充字符串我们想要的效果,根据utf-8中文编码规则,我们要str[3]str[4]str[5]三个字节合起来组成“北”字及 str[6]str[7]str[8]合起来组成“京”字 。由此引出下面第二种遍历方法 。
该方式是按照字符遍历的,所以不会出现乱码 , 如下:
运行结果:
从图中可以看到第二个汉子“京”的开始下标是6,直接跳过go语言填充字符串了4和5,可见确实依照utf8编码方式将三个字节组合成go语言填充字符串了一个汉字 , str[3]-str[5]组合成“北”字,str[6]-str[8]组合成了“京”字 。
由于下标的不确定性 , 所以引出了下面的遍历方式 。
1 可以先将字符串转成 []rune 切片
2 再用常规方法进行遍历
运行效果:
由此可见下标是按1递增的,没有产生跳跃现象 。
go语言怎么修改字符串中的某一个字符?go语言的字符串是UTF-8编码的、不可改变的字节序列 。
要修改字符串,只能以原串为基?。?创建一个新串 。下面的图中是一个参考示例,提供了以原串为蓝本,创建新串的两种方法 。
代码
输出
【go语言填充字符串 go语言如何输入】关于go语言填充字符串和go语言如何输入的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 微信电脑版从哪看直播回放,微信电脑版怎样看直播
- 抖音商城推荐如何取消推广,抖音商城怎么开通
- unity3d2d游戏开发从0到1,unity 2d游戏开发
- 记录行程轨迹的app安卓,记录行走轨迹app
- go语言网络算法 go 语言 gui
- 电商如何网络运营,电商如何网络运营销售
- 外星人怎么装固态硬盘,外星人装固态硬盘售后
- c语言的函数的试题 c语言编程题库及答案
- oracle查询系统字段,Oracle增加字段