go语言学习笔记 — 基础 — 基本数据类型 — 字符串(5):修改字符串

Go语言中的字符串是不可变的,这意味着不能直接修改字符串的字符。要实现字符串修改,需要将字符串转换为[]byte,进行操作后再转换回string。这种特性提供了线程安全和内存效率,避免了写时复制技术。示例代码展示了如何通过替换字符来'修改'字符串。
摘要由CSDN通过智能技术生成

我们无法直接修改go语言字符串的每一个字符元素,只能通过重新构造新的字符串,并赋值给原来的变量来实现。即:

  • go语言中的字符串和其他高级语言(Java、C#)一样,默认是不可变的(immutable)

  • 修改字符串时,先把字符串转换为[]byte,再通过强制类型转换为string。

  • []byte与string可以强制类型互转

angel := "Heros never die"

// 将字符串转为字符串切片
angleBytes := []byte(angel) 

// 利用循环,把never单词替换为空格
for i := 5; i <= 10; i++ {
    angleBytes[i] = ''
}

fmt.Println(string(angleBytes))
// Heros     die

看起来,我们通过代码达成了修改字符串的目标,但真实情况是这样的:代码实际修改的是[]byte,[]byte在go语言中是可变的,其本质就是一个切片。在完成了对[]byte的操作后,使用string()将[]byte转为字符串,重新创造了一个新的字符串。

注:字符串不可变有很多好处:

  • 天生线程安全
  • 大家使用的字符串都是只读对象,无须加锁
  • 方便内存共享,而不必使用写时复制(Copy On Write)等技术
  • 字符串的hash值也只需要制作一份。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值