s0 := "something"
s1 := "something"
s2 := "something"[7:]
fmt.Println(&s0, &s1, &s2)
fmt.Printf("%d \n", (*reflect.StringHeader)(unsafe.Pointer(&s0)).Data)
fmt.Printf("%d \n", (*reflect.StringHeader)(unsafe.Pointer(&s1)).Data)
fmt.Printf("%d \n", (*reflect.StringHeader)(unsafe.Pointer(&s2)).Data)
结果是
0xc00010a040 0xc00010a050 0xc00010a060
4974445
4974445
4974452
- 为什么 & 出来的总差 16 ? unsafe.Pointer 是一样的?(请忽略切片的)