我正在尝试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
。
相关分类