Golang中错误处理,反射,cgo

Go调用C代码(cgo)

注释
import”C“

用C.方法调用
进入C程序后,调度器无法抢占协程,当前栈切换到C的系统栈上
cgo限制了go的跨平台特性(c的实现与平台高度耦合)
最大的好处(调用现成的C实现)

defer

方便业务的编写
底层的话调用汇编分析
开始会包装一下defer
最后会调用defer方法

思路1
堆上分配,开辟一个deferpool,每遇到defer语句,将其放入其中(放在堆上就有垃圾的问题)
思路2
1.13之后 放入栈上,函数调用完之后栈帧会被直接回收,因为栈保存信息有限,规定只有一个defer可以再栈上分配

思路3 开放编码
1.14之后
如果defer比较简单,再编译时就能确定
会直接改写代码,放在函数尾

recover panic

panic后面的fmt不会打印
panic退出时会执行自己的defer,不会执行其他(主协程)的defer
黄色代码背景说明写的有些问题
panic底层 gopanic 最后的for也是只调用自己的defer

defer 后面写个recover函数
他会让其他的协程执行,

如果涉及recover,defer会使用堆上分配(deferpool)
遇到panic ,会从deferpool取出defer语句执行
defer中调用recover,会终止panic的执行

反射

程序运行的过程中动态的获取对象的类型
对任意类型变量赋值(int变为string)
动态的调用方法

元数据就是”数据的数据“
把对象的类型表示成一个数据类型就是元数据 (Type接口 ,chan等都是实现了这个接口)源码点向下箭头可查看 reflect。Type
把对象的值表示成一个数据类型就是元数据 reflect。Value 把对象的值表示成一个结构体,就能对其做操作

编译时反射对象会被编译器转化为空接口,反射到对象时,将类型和地址还原为数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值