在golang中,我们可以很轻易产生数以万计的goroutine,不过这也带来了麻烦:在运行中某一个goroutine异常退出,怎么办? 在erlang中,有link原语,2个进程可以链接在一起,一个在异常退出的时候,向另一个进程呼喊崩溃的原因,然后由另一个进程处理这些信号,包括是否重启这个进程。在这方面,erlang的确做得很好,估计以后这个特性会在golang中得到实现。 我要晨读
90后“老头儿”和00后Go小子的硬盘夜话 我要晨读
上个月,作为 Go 语言的三位创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顾了一下 Go 语言的发展过程。其中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言。还提到了,中国程序员对 Go 语言的热爱完全超出了他们的想象,甚至他们都不敢相信是真的。 我要晨读
这篇文章中我们会研究一个基本的同步问题。并使用 Golang 中原生的 Buffered Channels 来为这个问题找到一个简洁的解决方案。 我要晨读
golang底层实现资料 我要晨读
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 我要晨读
当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现,而且对于使用REST开发的应用程序更加容易扩展。 我要晨读
从 1999 年那时开始我就为 windows 写过服务,一开始用 C/C++,后来用 C#。现在我在 Linux 上用 Go 编写服务端软件。然而我没辙了。更令人沮丧的是,我一开始编写软件所用的操作系统并不是我即将部署所用的操作系统。当然,那是后话了 我要晨读
JIT(Just-int-time) 编译器是任何程序在被转换成机器码的运行过程中产生的。JIT 代码和其他代码(比如,fmt.Println)的区别在于 JIT 代码是在运行过程中生成的。 我要晨读
线上交付代码需要打成rpm 包,然后呢,我给运维的时候,运维说了句,你有空教我下,怎么打rpm包 我要晨读
为了能获取到更有价值的信息,我们只考虑大于等于三个字符的标识符。不出所料,在 Go 中最具代表性的判断语句 if err != nil {} 中的 err 和 nil 出现的最为频繁。 我要晨读
仅仅两年时间,在最流行的编程语言中,Go 语言从第 65 名飙升至第 17 名。以下是其快速增长的原因。 我要晨读
想象你正在编写一些用了可能 panic 的函数的代码,并且无论什么原因(第三方库,向后兼容,等等)你都不能改变那些函数。 我要晨读
//go:generate 的引入使得 Go 语言在构建过程中集成自动代码生成工具更加简单。stringer 使得编写重复代码更轻松,而 yacc 和 ragel 这类程序则让优化解析器的生成变得可能。在 GoGenerateTools 上你可以找到关于这类工具的一份不完整的列表。 我要晨读
线上服务,需要记录日志量比较大,便于排查问题,同时,线上要求所有日志需要经过rsyslog 灌到kafka 中去,我们日志需要按规定格式序列化。我们使用的log库是 "github.com/Sirupsen/logrus"。 那么问题来了,golang 的序列化性能真的是一言难尽。 我要晨读
当我接受了 Go 根本没有 object 之后,我才开始更容易理解 Go 的 object 是什么,其实就是一些可以操作共有状态的函数集合,加了点语法糖的点缀。 我要晨读
2006年开始入坑至今,期间还进进出出几次,没怎么做过大项目,多是自学,自学和自学。有些时候回头想想,也算接触过不少东东,但没有形成一个完整的体系,所以在这里写点东西,写到哪算哪吧,是总结,也是思考。 我要晨读
写爬虫的时候总会遇到爬取速度过快而被封IP的情况,这个时候就需要使用代理了。在https://github.com/henson/ProxyPool 的启发下,决定自己实现一个代理池。项目已经开源在github。 我要晨读
Go 语言有一个很强大的内置分析器(profiler),支持CPU、内存、协程 与 阻塞/抢占(block/contention)的分析。 我要晨读
每个操作系统都有一个固定大小的栈内存,用户保存函数的局部变量。但是空能会这个固定大小显然不太灵活。而goroutine在生命周期开始时申请一个很小的栈,与操作系统线程类似,用于保存函数调用期间的局部变量。本质区别是它的大小不是固定的,可以按需增大和缩小 我要晨读