首页 > 其他分享 >[Go] 理解 Go 的 unintptr、unsafe.Pointer、*type

[Go] 理解 Go 的 unintptr、unsafe.Pointer、*type

时间:2023-06-17 15:55:33浏览次数:41  
标签:Pointer unintptr unsafe Go type 指针

理解 Go 的 unintptr、unsafe.Pointer、*type

概念

  • *type: 用于传递对象地址, 无法进行指针运算
  • unsafe.Pointer: 通用指针, 用于表示任意类型的指针, 无法进行指针运算, 无法读取存储的值,可作为对象引用
    • 任意类型的指针可以转换为 unsafe.Pointer
    • unsafe.Pointer 可以转换为任意类型的指针
    • 可以和 unintptr 互相转换
    • 可比较, 支持与 nil 常量判断比较是否为空指针
  • unintptr: 可指针运算,由于其无法持有对象,GC不把unintptr当作指针,unintptr常被回收
    • 实际上 unintptr 就是一个整型值, 即便存储某个对象的内存地址, 也不算是对对象的引用

因为只有 unintptr 可以参与指针的运算, 所以常常与 unsafe.Pointer 配合, 将普通类型指针转换为
unintptr 来完成指针运算。

标签:Pointer,unintptr,unsafe,Go,type,指针
From: https://www.cnblogs.com/keepyang/p/17487546.html

相关文章

  • Django学习笔记
    1.常用命令创建项目:django-adminstartproject项目名创建APP(进入工程目录):pythonmanage.pystartapp网站名创建库表(进入工程目录):pythonmanage.pymakemigrations执行库表建立(进入工程目录):pythonmanage.pymigrate启动运动:pythonmanage.pyrunserver模板渲染嵌入......
  • MongoDB入门操作
    数据库操作查看所有数据库--->showdbs通过use关键字切换数据库--->usetestdb删除数据库--->db.dropDatabase()新增数据db.COLLECTION_NAME.insert(document)注意事项:在MongoDB中,存储的文档结构是一种类似于json的结构,称之为bson(全称为:BinaryJSON)如:{id:2,userna......
  • Go设计模式实战--用状态模式实现系统工作流和状态机
    大家好,这里是每周都在陪你进步的网管~!本节我们讲一个行为型的设计模式--状态模式,并通过Golang示例进行实战演示。状态模式(StatePattern)也叫作状态机模式(StateMachinePattern)状态模式允许对象的内部状态发生改变时,改变它的行为,就好像对象看起来修改了它实例化的类,状态模式是一种......
  • MongoDB入门介绍
    MongoDB简介MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库数据特征数据存储量较大,甚至是海量对数据读写的响应速度要求较高某些数据安全性要求不高,可以接受一定范围内的误差MongoDB存储......
  • 通过安装GVM 安装GO 操作步骤
    转载请注明出处:1.GVMGVM是GoVersionManager的缩写,是一个用于管理Go语言版本的工具。通过GVM,我们可以轻松地安装、切换和卸载不同版本的Go语言。GVM会在用户的home目录下创建一个名为.gvm的隐藏文件夹,其中包含已安装的Go版本和相关的配置文件。通过GVM安装Go的......
  • Go 语言之自定义 zap 日志
    Go语言之自定义zap日志zap日志:https://github.com/uber-go/zap一、日志写入文件zap.NewProduction、zap.NewDevelopment是预设配置好的。zap.New可自定义配置zap.New源码这是构造Logger最灵活的方式,但也是最冗长的方式。对于典型的用例,高度固执己见的预设(NewProdu......
  • gorm简介
    gorm简介什么是gorm?gorm是一个强大的Go编程语言中的ORM(对象关系映射)库。ORM是一种技术,它将数据库表中的数据映射到面向对象的模型中,从而简化了数据库操作。gorm的特点gorm具有许多令人称赞的特点,使其成为Go开发者的首选ORM库之一。1.简单易用gorm提供了简洁而直观的API,使得......
  • Go 语言之 zap 日志库简单使用
    Go语言之zap日志库简单使用默认的Gologlog:https://pkg.go.dev/logpackagemainimport( "log" "os")funcinit(){ log.SetPrefix("LOG:")//设置前缀 f,err:=os.OpenFile("./log.log",os.O_WRONLY|os.O_CREATE|os.O_APPEND,......
  • golang之context
    context用来解决goroutine之间退出通知、元数据传递的功能。 context使用起来非常方便。源码里对外提供了一个创建根节点context的函数:funcBackground()Context background是一个空的context,它不能被取消,没有值,也没有超时时间。有了根节点context,又提供了四个函数创......
  • golang之fmt格式化
    常用fmt中用于格式化的占位符 普通占位符占位符说明举例输出%v相应值的默认格式。Printf("%v",people){zhangsan},%+v打印结构体时,会添加字段名Printf("%+v",people){Name:zhangsan}%#v......