2 回答
TA贡献1876条经验 获得超6个赞
我知道Go字符串基本上是一个字节数组。
不完全是。字符串由
指向字节数组的指针,以及
一个与该数组的长度相对应的整数。
如果您可以更新给定字符串变量的单个符文,那么字符串将是可变的,这与Go设计人员的愿望相反:
字符串是不可变的:一旦创建,就不可能更改字符串的内容。
另请参阅 golang.org 博客上的这篇文章:
在 Go 中,字符串实际上是只读的字节片。
不变性有很多优点 - 首先,它很容易推理 - 但它可以被视为一种麻烦。当然,覆盖字符串变量是合法的:
str := "hello"
str = "eello"
此外,您始终可以将字符串转换为可变的数据结构(即 a 或 a ),进行所需的更改,然后将结果转换回字符串。[]byte[]rune
str := "hello"
fmt.Println(str)
bs := []byte(str)
bs[0] = bs[1]
str = string(bs)
fmt.Println(str)
输出:
hello
eello
(操场)
但是,请注意,这样做涉及复制,如果字符串很长和/或重复执行,则可能会损害性能。
TA贡献1820条经验 获得超9个赞
Go字符串是不可变的,行为类似于只读字节切片,要更新数据,请改用符文切片;
package main
import (
"fmt"
)
func main() {
str := "hello"
fmt.Println(str)
buf := []rune(str)
buf[0] = buf[1]
s := string(buf)
fmt.Println(s)
}
输出:
hello
eello
- 2 回答
- 0 关注
- 84 浏览
添加回答
举报