对于指针类型不安全编程,通过指针值以及偏移量操作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) }