Go语言如何修改字符串呢
2020-01-25 本文已影响0人
码二哥
参考:
http://c.biancheng.net/view/39.html
关键词
-
无法直接修改
字符串的内容 ?- 不能修改,你想一想,这样的话,用户读取的内容都是一样的,是不是
线程安全
呢
- 不能修改,你想一想,这样的话,用户读取的内容都是一样的,是不是
-
可以
间接的方式
修改字符串的内容 -
为什么在Go语言中也无法直接修改字符串的内容?为什么
这么设计
呢?
1、通过间接
的方式修改字符串
的内容?
例如:
func TestModifyString(t *testing.T) {
oldStr := "hello world"
fmt.Printf("--1-->%v\n", &oldStr)
oldStrBytest := []byte(oldStr)
for i:=3; i<8 ; i++ {
oldStrBytest[i] = '@'
}
oldStr = string(oldStrBytest)
fmt.Printf("--2-->%v\n", &oldStr)
for _, k := range oldStr {
fmt.Printf("%c", k)
}
fmt.Println()
}

2、为什么字符串不能直接
修改呢?
会有很多好处
:
-
天生
线程安全
- 用户使用的都是
只读对象
, 无须加锁
- 用户使用的都是
-
方便
共享内存
,避免使用了写时复制(Copy On Write)等技术 -
字符串hash值也只需要制作一份