【GoLang】string入门

底层数据结构

string底层结构包含了指向 byte数组的指针,string的字节长度。
string的值都存储在指针指向的 byte数组中
在这里插入图片描述

3种初始化方式

string可以通过 := 、var 来进行初始化,具体如图所示
在这里插入图片描述

2种遍历方式及不同点

1. 普通for循环

在这里插入图片描述

2. for-range

在这里插入图片描述

问题来了,明明都是字符串s1,为什么2种遍历方式得到的结果却不同呢?答案如下:

普通for循环是字符串中的字节进行遍历
for-range是对字符串中的字符进行遍历

在上述案例中,“nb哦” 有3个字符,5个字节,所以遍历结果才会不同。

但还有一个问题,有3个字符我能理解,但有5个字节又是为什么呢?
因为 ‘哦’ 这个字符在Unicode字符集中的编号在进行UTF-8编码后得到的是3个字节的二进制编码。
也就是 ‘哦’ 这1个字符代表了3个字节。

如果不理解也没关系,只需要知道1个数字、字母、符号字符通常是1个字节,1个汉字字符通常是3个字节。

求字符串的长度

用到 len() 函数
注意:求得的是string中的字节数,而不是字符数。

在这里插入图片描述

值不可修改

字符串的内容是不可变的,这是因为
在并发场景下,我们可以在不加锁的控制下,多次使用同一字符串,在保证高效共享的情况下而不用担心安全问题。

在这里插入图片描述
在这里插入图片描述

在实际编程中,我们可以通过字符串替换、对转换后的切片进行修改等方式来实现字符串的修改操作,这些操作会返回新的字符串值。

重新赋值

string类型虽然是不能更改的,但是可以被替换,因为stringStruct中的str指针是可以改变的,只是指针指向的内容是不可以改变的,也就说每一个更改字符串,就需要重新分配一次内存,之前分配的空间会被gc回收。
在这里插入图片描述
图示代码为s1重新赋值了,看似改变了s1的值,实际上是让s1的底层数据结构指向了一个新的byte数组。

拼接操作

+号

当数据量少时,我们可以用 + 进行拼接。
当进行少量字符串拼接时,直接使用+操作符进行拼接字符串,效率还是挺高的,但是当要拼接的字符串数量上来时,+操作符的性能就比较低了。
在这里插入图片描述

strings.builder

当数据量少或多时,我们都可以用strings.builder进行拼接。无论什么情况下使用strings.builder进行字符串拼接都是最高效的。在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值