对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性

// 通过指针值获取切片
func TestGetPrivate(t *testing.T) {
	s := []int{1, 2, 3}
	sptr := uintptr(unsafe.Pointer(&s)) // 获取当前结构体实例的指针值
	t.Log(sptr)
	arrPtr := (*[]int)(unsafe.Pointer(sptr))// 对于slice结构体而言,第一个属性就是数组指针类型
	arr := *arrPtr
	t.Logf("%v,%T", arr, arr)
	lenPtrAddr := sptr + unsafe.Sizeof(unsafe.Pointer(sptr))// 根据第一个属性的指针值以及第一个属性类型的长度,获取第二个属性的地址值
	lenPtr := (*int)(unsafe.Pointer(lenPtrAddr)) // 获取len属性的地址值
	assert.Equal(t, len(s), *lenPtr)
}