猿问

字符串切片是否执行基础数据的复制?

我正在尝试string使用utf8库有效地计算来自 utf-8 的符文。这个例子是否是最佳的,因为它不复制底层数据?
https://golang.org/pkg/unicode/utf8/#example_DecodeRuneInString

func main() {

    str := "Hello, 世界" // let's assume a runtime-provided string

    for len(str) > 0 {

        r, size := utf8.DecodeRuneInString(str)

        fmt.Printf("%c %v\n", r, size)

        str = str[size:] // performs copy?

    }

}

我在(不安全的)反射库中找到了StringHeader 。string这是Go 中a 的确切结构吗?如果是这样,可以想象对字符串进行切片只是更新Data或分配一个新的StringHeader字符串。

type StringHeader struct {
        Data uintptr
        Len  int
        }

奖励:我在哪里可以找到执行切片的代码string以便我自己查找?这些中的任何一个?
https://golang.org/src/runtime/slice.go
https://golang.org/src/runtime/string.go

This related SO answer表明运行时字符串从string转换为时会产生一个副本[]byte


哆啦的时光机
浏览 90回答 0
0回答
随时随地看视频慕课网APP

相关分类

Go
我要回答