Tony Bai · Go 语言第一课
Tony Bai
资深架构师,tonybai.com 博主
2343 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
26|方法:如何用类型嵌入模拟实现“继承”?
30|接口:Go中最强大的魔法
33|并发:小channel中蕴含大智慧
课程目录
已更新 50 讲/共 54 讲
开篇词 (1讲)
开篇词|这样入门Go,才能少走弯路
前置篇:心定之旅 (2讲)
01|前世今生:你不得不了解的Go的历史和现状
02|拒绝“Hello and Bye”:Go语言的设计哲学是怎么一回事?
入门篇:勤加练手 (7讲)
03|配好环境:选择一种最适合你的Go安装方法
04|初窥门径:一个Go程序的结构是怎样的?
05|标准先行:Go项目的布局标准是什么?
06|构建模式:Go是怎么解决包依赖管理问题的?
07|构建模式:Go Module的6类常规操作
08|入口函数与包初始化:搞清Go程序的执行次序
09|即学即练:构建一个Web服务就是这么简单
基础篇:“脑勤”多理解 (20讲)
10|变量声明:静态语言有别于动态语言的重要特征
11|代码块与作用域:如何保证变量不会被遮蔽?
12|基本数据类型:Go原生支持的数值类型有哪些?
13|基本数据类型:为什么Go要原生支持字符串类型?
14|常量:Go在“常量”设计上的创新有哪些?
15|同构复合类型:从定长数组到变长切片
16|复合数据类型:原生map类型的实现机制是怎样的?
17|复合数据类型:用结构体建立对真实世界的抽象
18|控制结构:if的“快乐路径”原则
19|控制结构:Go的for循环,仅此一种
20|控制结构:Go中的switch语句有哪些变化?
21|函数:请叫我“一等公民”
22|函数:怎么结合多返回值进行错误处理?
23|函数:怎么让函数更简洁健壮?
24|方法:理解“方法”的本质
25|方法:方法集合与如何选择receiver类型?
26|方法:如何用类型嵌入模拟实现“继承”?
加餐|我“私藏”的那些优质且权威的Go语言学习资料
加餐|聊聊Go 1.17版本的那些新特性
27|即学即练:跟踪函数调用链,理解代码更直观
测试题 (1讲)
期中测试|一起检验下你的学习成果吧
用户故事 (1讲)
用户故事|罗杰:我的Go语言学习之路
大咖助阵 (2讲)
孔令飞|从小白到“老鸟”:我的Go语言进阶之路
叶剑峰|Go语言中常用的那些代码优化点
核心篇:“脑勤+”洞彻核心 (10讲)
28|接口:接口即契约
29|接口:为什么nil接口不等于nil?
30|接口:Go中最强大的魔法
元旦快乐|这是一份暂时停更的声明
31|并发:Go的并发方案实现方案是怎样的?
32|并发:聊聊Goroutine调度器的原理
33|并发:小channel中蕴含大智慧
34|并发:如何使用共享变量?
35|即学即练:如何实现一个轻量级线程池?
加餐|如何拉取私有的Go Module?
实战篇:打通“最后一公里” (3讲)
36|打稳根基:怎么实现一个TCP服务器?(上)
37|代码操练:怎么实现一个TCP服务器?(中)
38|成果优化:怎么实现一个TCP服务器?(下)
新春特别策划 (3讲)
结课测试&春节策划|快来检验下你的学习成果吧!
徐祥曦|从销售到分布式存储工程师:我与 Go 的故事
曹春晖|聊聊Go 语言的 GC 实现
Tony Bai · Go 语言第一课
15
15
1.0x
00:00/00:00
0.75x
1.0x
1.25x
1.5x
2.0x
登录
|
注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。
开通会员
曹春晖|聊聊Go 语言的 GC 实现
曹春晖
2022-02-04
作者注:本文只作了解,不建议作为面试题考察。
你好,我是曹春晖,是《Go 语言高级编程》的作者之一。
今天我想跟你分享一下 Go 语言内存方面的话题,聊一聊 Go 语言中的垃圾回收(GC)机制的实现,希望你能从中有所收获。
武林秘籍救不了段错误
包教包会包分配
在各种流传甚广的 C 语言葵花宝典里,一般都有这么一条神秘的规则,不能返回局部变量:
int
* func(
void
) {
int
num
=
1234
;
/* ... */
return
&
num
;
}
duang!
当函数返回后,函数的栈帧(stack frame)就会被销毁,引用了被销毁位置的内存,轻则数据错乱,重则 segmentation fault。
可以说,即使经过了八十一难,终于成为了 C 语言绝世高手,我们还是逃不过复杂的堆上对象引用关系导致的 dangling pointer:
当 B 被 free 掉之后
你看,在这张图中,当 B 被 free 掉之后,应用程序依然可能会使用指向 B 的指针,这就是比较典型的 dangling pointer 问题,堆上的对象依赖关系可能会非常复杂。所以,我们要正确地写出 free 逻辑,还得先把对象图给画出来。
不过,依赖人去处理复杂的对象内存管理的问题是不科学、不合理的。C 和 C++ 程序员已经被折磨了数十年,我们不应该再重蹈覆辙了,于是,后来的很多编程语言就用上垃圾回收(GC)机制。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
©
版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
26|方法:如何用类型嵌入模拟实现“继承”?
30|接口:Go中最强大的魔法
33|并发:小channel中蕴含大智慧
37|代码操练:怎么实现一个TCP服务器?(中)
38|成果优化:怎么实现一个TCP服务器?(下)
结课测试&春节策划|快来检验下你的学习成果吧!
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录
后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
下载
客户端
返回
顶部