只需运行fmt.Println(unsafe.Sizeof(""))prints 16。更改字符串的内容不会影响结果。
有人能解释一下这个数字(16)是怎么来的吗?
reflect.StringHeaderGo 中的字符串通过包含指向实际字符串数据的指针和字符串长度来表示:
type StringHeader struct {
Data uintptr
Len int
}
Run Code Online (Sandbox Code Playgroud)
unsafe.Sizeof(s)只会返回StringHeader结构体的大小,而不返回指向的数据本身。因此(在您的示例中)它将是 8 个字节Data和 8 个字节的总和,使其Len成为 16 个字节。