今天在学习`unsafe.Pointer`用法的时候,无意中发现这么写slice自身的指针会变
```golang
data := []byte{0, 0}
fmt.Printf("%p\n", data) // 0xc0001202a0
p := (*[2]byte)(unsafe.Pointer(&data))
// p := (*[2]byte)(unsafe.Pointer(&data[0])) // 如果换成这种写法,则没问题
fmt.Printf("%p\n", data) // 0xc0001202a0
for i := range p {
p[i] = 1
// fmt.Printf("%p\n", data) 在这里每次循环,data的指针都会改变
}
fmt.Printf("%p\n", data) // 0xc000120101
```
有没有大佬知道这是什么原因吗
有疑问加站长微信联系(非本文作者))