
golang
文章平均质量分 91
yyhero1
这个作者很懒,什么都没留下…
展开
-
golang slice map 的一些常见坑
1,常看到有博客或者书说道,golang内部有引用类型,这里说明一哈,golang里面所有的类型都是值类型,之所以有些用起来像引用,是在于该类型内部是用指针实现的,但是其本质就是包含指针的结构体。我们常常用错的类型就是Slice.以下是slice这个类型的实现:type slice struct { array unsafe.Pointer // 内部是分配一个连续的内存块,这个指针...原创 2018-12-04 10:15:37 · 8544 阅读 · 2 评论 -
golang 内存分配
golang 的内存分配类似于tcmalloc(全局缓存堆和进程所属私有缓存)内存分配策略,大致采用三层内存分配模式。其中主要分为mheap, mCentral, mCache.mheap:直接向操作系统申请内存,申请对象以页为基础单位,同时还负责大内存的直接分配。mCentral:作为上级mheap, 下级mCache的中间项,起承上启下的作用, 当下级mCache内存不够时,mCach...原创 2018-12-11 16:08:27 · 667 阅读 · 0 评论 -
golang defer详解
defer 在golang 中充当try catch捕获异常的作用,这里详细叙述一哈defer的用法和注意事项。1.在一个函数中存在多个defer ,defer 采用先入后出的顺序执行。2.defer在声明时,会优先执行函数中的参数,延迟执行的是函数体。3.函数在中途panic的时候,只会执行当前代码行之前的defer,如果之后还有defer则不会执行。4.如果os.exit()强...原创 2019-01-03 15:21:04 · 441 阅读 · 0 评论 -
golang channel实现
golang 在多协程之间交互,除了支持传统的通过共享数据来进行通信(公共数据加锁),更推崇通过通信来共享数据。所谓的通过通信来共享数据,借鉴于csp并发模型(两个独立的并发实体通过共享的通讯管道进行通信的并发模型),即通过共享的channel在多个goroutine之间传递数据,达到共享数据的需求。这里主要谈谈channel是如何实现的,先看看源码:type hchan struct ...原创 2019-01-28 16:17:08 · 340 阅读 · 0 评论 -
golang 包管理机制
golang 通过goroot, gopath对项目进行管理,goroot目录安装go语言包,gopath作为workspace放项目代码。同时将goroot, gopath加入系统的环境变量即可。golang在import依赖库的时候,是使用相对于gopath/src目录下的相对路径。当使用go get命令时,会扫描源代码里面的import语句,将相应的第三方引用下载到gopath/src下对应...原创 2019-02-18 15:45:42 · 399 阅读 · 0 评论