首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
Go
订阅
貓哥
更多收藏集
微信扫码分享
微信
新浪微博
QQ
76篇文章 · 0订阅
Goroutine泄露的危害、成因、检测与防治
goroutine泄露的危害 Go内存泄露,相当多数都是goroutine泄露导致的。 虽然每个goroutine仅占用少量(栈)内存,但当大量goroutine被创建却不会释放时(即发生了gorou
用Go语言实现23种设计模式
设计模式是软件工程中各种常见问题的经典解决方案,设计模式不只是代码,而是组织代码的方式。假设一行行的代码是砖,设计模式就是蓝图。
Go并发编程 — sync.Once 单实例模式的思考
Go 并发编程的场景中,有一个特别经典的场景,就是并发创建对象的时候。一般伪代码如下: 因为是并发的环境,所以多个 goroutine 短时间内得出的判断都是一样的:都判断得到对象是不存在的,这时候大家的的行为也特别一致,每个 goroutine 磨刀霍霍就是创建。这时候如果不…
Go组件学习——database/sql数据库连接池你用对了吗
这里maxOpenConns设置为10,足够这里的两次查询使用了。 之所以阻塞,是因为拿不到连接,可用的连接一直被上一次查询占用了。 除了maxOpenConns=1以外,这里多了rows遍历的代码。 显然,这里第二次查询并没有阻塞,而是拿到了连接并查到了结果。 所以,这里ro…
原来这才是 Go Interface
interface 的主要工作仅是提供方法名称签名,输入参数,返回类型。最终由具体的对象来实现方法,比如 struct; 使用 type 关键字来申明,interface 代表类型,大括号里面定义接口的方法签名集合。 如下,Dog 实现了 Animal 接口,所以可以用 Ani…
Go 错误处理:用 panic 取代 err != nil 的模式
前段时间我分享了文章 《先睹为快,Go2 Error 的挣扎之路》后,和一位朋友进行了一次深度交流,他给我分享了他们项目组对于 Go 错误处理的方式调整。 简单来讲,就是在业务代码中使用 panic 的方式来替代 “永无止境” 的 if err != nil。这就是今天本文的重…
Go 最细节篇 — chan 为啥没有判断 close 的接口 ?
相信大家初学 golang chan 的时候应该都遇到过 "send on closed channel" 的 panic 。这个 panic 是当你意图往一个已经 close 的 channel 里面投递元素的时候触发。那么你当你第一次遇到这个问题是否想过 channel 是…
Go 并发:一些有趣的现象和要避开的 “坑”
大家好,我是煎鱼。 最近在看 Go 并发相关的内容,发现还是有不少细节容易让人迷迷糊糊的,一个不小心就踏入深坑里,且指不定要在上线跑了一些数据后才能发现,那可真是太人崩溃了。 今天来分享几个案例,希望大家在编码时能够避开这几个 “坑”。 在上述代码中,我们通过 for-loop…
正确规避常见的 Go 并发陷阱
作为一门并发性能优越的语言,Go虽然降低了协程并发开发的难度,但也存在一些并发陷阱,这就需要我们在开发时额外注意。 我们再来介绍与Go 并发相关的几个小技巧,帮助你规避 Go 并发开发的一些陷阱。 这是因为 i 使用的地址空间在循环中被复用,在 goroutine 执行时,i …
揭开defer的面纱
在1.12版本使用的是堆分配,1.13版本加入栈分配,现在1.14版本又加入开放源码,可以看到堆分配是最后的兜底方案。现在我们会来介绍每一种方案。 声明defer关键字处使用deferproc() 注册defer处理函数,将对应的_defer结构体值拷贝到堆上。 对于新创建好的…