字符串内部实现
看 runtime 源码找字符串的定义:
grep -n "type string" *
type stringStruct struct {
str unsafe.Pointer
len int
}
uintptr
与unsafe.Pointer
区别,uintptr
保存的是整数,并不能保证目标不会被垃圾回收,不能保证它持有对象的引用。
uint
与int
区别,跟汇编指令优化有关系,int
类型是汇编处理默认类型,汇编对于数字是有类型的,在内核层面以性能为优先,并不在乎业务实现。暴露给用户的是公开接口,内部性能优先。不同类型CPU架构处理方式不一样,所以会选择默认类型。
13 Go字符串和C char*的差异
C语言中*char
代表字符串,一个字节数组加个一个结束符。Go语言字符串底层是字节数组,字节数组保存数据但没有结束信息。它单独会构建一个头信息,头信息开始位置是个指针