*今天看到一段代码感觉很奇怪。。。*
代码的如下
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
代码运行结果如下
感觉很奇怪。。为什么unsafe.Sizeof(a)计算出来的值是16?问题先写出来,我要去好好研究一下。。。
初步解释:因为Golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度,两部分各是8字节,所以一共16字节
//组成可以理解成此结构体
typedef struct{
char* buffer;
size_tlen;
} string;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
本文探讨了Golang中字符串的内部实现原理,通过一段示例代码解释了`unsafe.Sizeof`函数返回值为16的原因。揭示了Golang字符串是由指向缓冲区的指针和长度两个8字节字段组成的结构。
3511

被折叠的 条评论
为什么被折叠?



