随笔分类 - go
摘要:1、路由定义 func InitRouter() *gin.Engine { router := gin.Default() router.GET("/", controllers.IndexAction) router.GET("/one", controllers.GetOneAction) v
阅读全文
摘要:一、数据安全性控制(data race) 互斥锁 sync.Mutex 读写锁 sync.RWMutex 原子操作sync/atomic 二、并发gorutine行为控制 sync.WaitGroup(等待所有gorutine全部结束) channel(可以用有缓冲队列控制gorutine的数量,可
阅读全文
摘要:一、什么是内存逃逸? golang在编译时,需要确定一个变量到底是在栈上分配内存,还是在堆上分配内存,不能在栈上分配的变量,就只能在堆上分配,就说这个变量内存逃逸了。 二、什么时候会内存逃逸? 引起内存逃逸的关键:编译器在编译时,无法确定变量的生命周期,只能在运行时控制。 函数返回了局部变量的指针
阅读全文
摘要:map主要由连个数据结构实现,hmap+bmap,hmap是map的整体描述信息,相当于头节点,包含了bmap的地址,bmap是真正存储数据的地方,一个bucket可以存8个k-v,当超过8个k-v后,会用拉链法生成溢出bucket,bmap本身是连续的内存数组。 查找过程:先根据hash函数和ha
阅读全文
摘要:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } context顾名思义为
阅读全文
摘要:1、架构图 2、基本概念 G:gorutine协程,由go关键字创建。主要作用是执行逻辑代码。 P:Processor处理器,最多有 GOMAXPROCS个。主要作用是维护调度G。 M: 操作系统线程的抽象结构,维护着内核线程信息,代码的实际执行者。 3、调度概述 go程序启动时,会根据GOMAXP
阅读全文
摘要:go语言的内存分配不是每次都触发系统调用,go程序运行开始,先向操作系统申请一块较大的内存空间,然后由go在运行时分配 go内存分配的基本单元的mspan,为了减少内存碎片,go有67种大小的mspan,给对象分配最接近的mspan GPM模型中,每个P有一块本地内存mcache,小对象直接从mca
阅读全文
摘要:1、什么是GC? 字面意思:垃圾回收,对于已经分配且不再有用的内存进行回收的管理机制或程序 2、为什么要GC? 防止内存溢出(OOM) 3、怎么GC? GO的GC基于标记法,将对象分为三种颜色:黑色(有用对象)、灰色(被引用对象,不知道还有没有其他依赖对象)、白色(不被引用对象,需要被回收)。 GC
阅读全文