上面的例子中,感觉我们通过代码达成了修改字符串的过程,但真实的情况是:
Go中,字符串默认是不可变类型。上面代码实际修改的是[]byte,[]byte是可变类型,本身就是一个切片
字符串不可变有很多好处:
- 天生线程安全,大家使用的都是只读对象,无须加锁;
- 方便内存共享,而不必使用写时复制等技术
- 字符串hash值也只需要制作一份。
总结:
- Go语言的字符串是不可变的;
- 修改字符串时,可以将字符串转换为[]byte进行修改;
- []byte和string可以通过强制类型转换互转。