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

  

最新文章

  1. 小菜学习设计模式(一)—模板方法(Template)模式
  2. linux 基础知识
  3. Protocol buffers 介绍
  4. Java语法基础思维图
  5. Spring的定时任务配置2(转)
  6. 删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
  7. 147. Insertion Sort List
  8. sql新手全套
  9. Android集成Mina NIO Socket
  10. Node.js : 我只需要一个店小二
  11. CodeForces 701C They Are Everywhere(map的应用)
  12. js中盒子模型常用的属性你还记得几个?
  13. TCP建立连接和断开连接图解
  14. Eclipse远程调试hadoop源码
  15. Python标准库之textwrap模块
  16. Distance on the tree
  17. C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】
  18. Gluon Datasets and DataLoader
  19. Guava 2:Basic utilities基本工具
  20. JS 自己实现Map

热门文章

  1. Java之reflection(反射机制)——通过反射操作泛型,注解
  2. Tensorflow2(一)深度学习基础和tf.keras
  3. jQuery入口函数与JavaScript入口函数的区别
  4. Auto Generate Reflection Information for C++
  5. 在Windows和MacOS下编译Lua
  6. Spine应用--使用Spine动画制作动作游戏
  7. jkd1.8 stream
  8. My Github Repository
  9. EasyPoi导出Excel
  10. [LeetCode题解]79. 单词搜索