GO源码
文章平均质量分 59
笔记
manubu1012
窥镜而自视,又弗如远甚
展开
-
ch8-error
error就是一个接口errors包常用的New理如下一般New中的参数首字母小写结尾不加标点。原创 2023-09-08 07:57:14 · 63 阅读 · 0 评论 -
ch6-unsafe
首先介绍一下unsafe.Pointer,它与普通的指针区别在于其可与其他类型的指针、uintptr互换。uintptr表示地址的整型,转化为其他类型就可以修改变量值,转化为uintptr就可以参与四则运算,定位变量地址利用sizeof也可以做到,不在演示。原创 2023-09-08 07:54:50 · 45 阅读 · 0 评论 -
ch5-interface
两者都是描述interfce的结构体,iface表示非空接口,eface(empty interface)表空接口两者都具有data字段,data指向接口具体的值,值一般在堆内存。不同的是iface具有itab(其中也有*_type),看看itabfun数组的大小为1,其他方法在添加在第一个方法之后,增加地址大小获得之后对应方法,方法的地址是按照字典序在内存排序的。还有如果接口被重新赋值,对应的fun数组也会更新。再看看interfacetype类型Go每种类型都包含_type,都是在其之上增加一些字段。原创 2023-09-08 07:53:18 · 68 阅读 · 0 评论 -
ch4-channel
唯一可能panic的就是向关闭的channel中写数据,向nil中读写会被一直阻塞。原创 2023-07-15 21:36:08 · 38 阅读 · 0 评论 -
ch3-map
map的主要结构是一个bucket数组。每个bucket可以储存8个hash值一类的key-value对,key的hash值前八位决定落在某个具体的槽位。当有第9个是,会创建一个新的bucket,,并且,key和value分开存放,而不是key/value/key/value这样交替存放。这样做在某些情况下可以忽略padding字段。当key和value都不是指针,并且小于128B时,overflow字段会移动到extra字段。避免gc扫描整个bucket。原创 2023-07-12 16:20:01 · 45 阅读 · 0 评论 -
ch3-slice
切片是对数组的封装,切片实际上是一个含有:容量(cap)、长度(len)、底层数组(array)的结构体。不同长度的数组,即便含有相同的数据类型也是不同的类型。而切片则是相同的类型。原创 2023-06-29 08:51:12 · 47 阅读 · 0 评论 -
ch2-defer
可以让defer后的语句在当前函数执行完成后执行。应用场景:在打开文件下一场使用defer避免忘记关闭。但是,defer具有短暂延迟,对于高性能的程序尽量避免使用。原创 2023-06-20 11:36:48 · 34 阅读 · 0 评论 -
ch1-逃逸分析
分析一个变量分配时堆上还是栈上。原创 2023-06-19 11:49:00 · 63 阅读 · 0 评论