Go 中的 interface 可以静态编译,动态执行,是最让我感到兴奋的一个特性。如果要让我推荐一个 Go 语言的特性给其他的语言,那我一定会推荐 interface。 我要晨读
我们在网上做的工作,大部分其实就是事件,webhooks 已经成为了连接系统的主要方式,不管是用户创建、支付成功、DockerHub 镜像推送或者 Git 仓库上的合并请求,这些都是非常有用并且轻量级的共享信息的方式 我要晨读
CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。 我要晨读
tail 是我们大多数人都熟悉的命令。我假设你也熟悉提供的 -f 选项。如果你不熟悉,知道它会打印出文件的最后几行即可。最近在一个项目上工作,我想知道我需要做什么来实现这个功能。这个想法来自阅读 Feynman 的书: 我要晨读
正如前面的文章提到的,go-micro 是一个可插拔的框架,它连接了许多不同的常用技术。如果你看看插件仓库,你会看到它支持多少插件。 在我们的例子中,我们将使用 NATS 代理插件。 我要晨读
Go 语言的错误处理是基于明确的目的而设计的。你应该从函数中返回所有可能的错误,并且检查/处理这些返回值。和其他语言相比,这一点可能看起来有些繁琐和不人性化,其实并不是这样的。让我们来看看一些基本的例子,然后继续做一些较重要的事情。 我要晨读
按照 Go 语言官方文档所说, unsafe 是关注 Go 程序操作类型安全的包。 像包名暗示的一样,使用它要格外小心; unsafe 可以特别危险,但它也可以特别有效。例如,当处理系统调用时,Go 的结构体必须和 C 的结构体拥有相同的内存结构,这时你可能除了使用 unsafe 以外,别无选择。 我要晨读
node的tick()方法调用raft/raft.go中raft结构体的tick()。在1.2节中, raft.becomeFollower()中设置了raft结构体的step函数和tick函数=tickElection。 我要晨读
“区块链”这个名词在三年以前还是一个很小众的技术词汇,但是随着2017年各种加密数字货币的横空出世,这个词现在变得人尽皆知了,确实,连跳广场舞的大妈都加入了炒币的行列,但这并不是一个好的信号,俗话说“大妈的涉足就是最好的看空指标”,果不其然,在比特币达到价格顶峰以后,开始一路跳水,到现在差不多已经跌去价格的四分之三了,而那些宣称区块链将要改变世界的人也变得沉默了许多。 我要晨读
我一般调试Go程序都是通过log日志,性能调试的话通过 pprof 、trace、flamegraph等,主要是Go没有一个很好的集成的debugger,前两年虽然关注了delve,但是在IDE中集成比较粗糙,调试也很慢,所以基本不使用debugger进行调试, 最近看到滴滴的工程师分享的使用debugger在调试Go程序,我觉得有必要在尝试一下这方面的技术了。 我要晨读
当你的golang程序在运行过程中消耗了超出你理解的内存时,你就需要搞明白,到底是 程序中哪些代码导致了这些内存消耗。此时golang编译好的程序对你来说是个黑盒,该 如何搞清其中的内存使用呢?幸好golang已经内置了一些机制来帮助我们进行分析和追 踪。 此时,通常我们可以采用golang的pprof来帮助我们分析golang进程的内存使用。 我要晨读
Golang被证明非常适合并发编程,goroutine比异步编程更易读、优雅、高效。本文提出一个适合由Golang实现的Pipeline执行模型,适合批量处理大量数据(ETL)的情景。 我要晨读
这是 Cloudflare 的 Filippo Valsorda 2016年发表在Gopher Academy的一篇文章, 虽然过去两年了,但是依然很有意义。 我要晨读
PouchContainer 源自阿里巴巴内部场景,诞生初期,在如何为互联网应用保驾护航方面,倾尽了阿里巴巴工程师们的设计心血。 我要晨读
ldd、objdump、nm、strings、strip等工具 我要晨读
并发环境应用map的解决方案 我要晨读
Dockerfile多阶段构建原理 我要晨读
Docker+UPX 构建更小的镜像 我要晨读
闲话高并发的那些神话,看京东架构师如何把它拉下神坛 我要晨读
从某些方面来讲,这个代码算是比较标准为了实现“在规定的时间内完成相关功能”,同时“程序员水平不高”、“经过大量优化”之后,变地特别烂的。但是其中,程序员的水平和态度是最主要的,其他相对于而言都是次要的。 我要晨读