深度解密 Go 语言之关于 interface 的 10 个问题

这次文章依然很长,基本上涵盖了 interface 的方方面面,有例子,有源码分析,有汇编分析,前前后后写了 20 多天。洋洋洒洒,长篇大论,依然有些东西没有涉及到,比如文章里没有写到反射,当然,后面会单独写一篇关于反射的文章,这是后话。 还是希望看你在看完文章后能有所收获,有任何问题或意见建议,欢迎在文章……

阅读全文

深度解密 Go 语言之 slice

Go 语言的 slice 很好用,不过也有一些坑。slice 是 Go 语言一个很重要的数据结构。网上已经有很多文章写过了,似乎没必要再写。但是每个人看问题的视角不同,写出来的东西自然也不一样。我这篇会从更底层的汇编语言去解读它。而且在我写这篇文章的过程中,发现绝大部分文章都存在一些问题,文章里会讲到,……

阅读全文

深入 Go 的底层,带你走进一群有追求的人

上周六晚上,我参加了“Go夜读”活动,这期主要讲Go汇编语言,由滴滴大佬曹春晖大神主讲。活动结束后,我感觉打通了任督二脉。活动从晚上9点到深夜11点多,全程深度参与,大呼过瘾,以至于活动结束之后,久久不能平静。 可以说理解了Go汇编语言,就可以让我们对Go的理解上一个台阶,很多以前……

阅读全文

图解 Go 语言内存分配

Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。 Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread……

阅读全文

Golang 之变量去哪儿

写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一不小心,就会发生内存泄露,搞得胆战心惊。 切换到Golang后,基本不会担心内存泄露了。虽然也有new函数,但是使用new函数得到的内存不一定就在堆上。堆和……

阅读全文

Golang 之轻松化解 defer 的温柔陷阱

什么是defer? defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行。 defer语句通常用于一些成对操作的场景:打开连接/关闭连接;加锁/释放锁;打开文件/关闭文件等。 defe……

阅读全文

一个字节的网络漫游故事独白

大家好,给大家介绍一下,我是一个字节。相比于你们人类据说即将达到的百岁人生的寿命,我的一生简直不直一提(我只能存活零点几个毫秒)。 也许只有那些码农才会了解我,而且也只有一部分码农。那些整天做业务的猿们想来也不会真正的了解我,更别提人类其他行业的人了。 我不甘心,虽然我微不足道,但是……

阅读全文

深度解密 HTTP 通信细节

上一篇文章中,我们学会了用wireshark和tcpdump来分析TCP的“三次握手,四次挥手”,非常好用。这哥俩就是传说中的锤子,拿着锤子,看什么都像钉子!在这篇文章中,我对准了HTTP这颗钉子砸下去,咳咳。 为了对网络数据包的“流转”有更加深刻的理解,我在docker(远程)上……

阅读全文

“三次握手,四次挥手”你真的懂吗?

记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去我也不懂,皆大欢喜! 作为程序员,要有“刨根问底”的精神。知其然,更要……

阅读全文