为什么说 Go 语言字符串是不可变的? |
您所在的位置:网站首页 › qq中的字符有哪些字 › 为什么说 Go 语言字符串是不可变的? |
这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。 首先来看看它的底层结构: type stringStruct struct { str unsafe.Pointer len int }和切片的结构很像,只不过少了一个表示容量的 cap 字段。 str:指向一个 []byte 类型的指针len:字符串的长度所以,当我们定义一个字符串: s := "Hello World"那么它在内存中存储是这样的: 当我们在程序中对字符串进行重新赋值时,比如这样: s := "Hello World" s = "Hello AlwaysBeta"底层的存储就变成了这样: Go 实际上是重新创建了一个 []byte{} 切片,然后让指针指向了新的地址。 更直接一点,我们直接修改字符串中的单个字符,比如: s := "Hello World" s[0] = 'h'这样做的话,会直接报错: cannot assign to s[0] (strings are immutable)如果一定要这么做的话,需要对字符串进行一个转换,转换成 []byte 类型,修改之后再转换回 string 类型: s := "Hello World" sBytes := []byte(s) sBytes[0] = 'h' s = string(sBytes)这样就可以了。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |