Go语言的性能可以做到非常好,但是一些标准库的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有! 我要晨读

已有57人晨读

Go 1.7,testing 包在 T 和 B 类型上引入了一个 Run 方法,允许创建子测试和子基准测试。子测试和子基准测试的引入可以更好地处理故障(failures),细化控制从命令行运行的测试,并行控制,并且经常会使代码更简单、更易于维护。本文介绍使用方法。 我要晨读

已有152人晨读

日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。然而,由于日志通常不属于系统的核心功能,所以常常不被团队成员所重视。对于一些简单的小程序,可能并不需要在如何记录日志的问题上花费太多精力。但是对于作为基础平台为很多产品提供服务的后端程序,就必须要考虑如何依靠良好的日志来保证系统可靠的运行了。 我要晨读

已有254人晨读

Go 标准库有一个 expvar 包。该包可以通过 JSON 格式的 HTTP API 公开您的应用程序和 Go 运行时的指标。 我认为这个软件包对于每个人 gopher 来说都是有用的。这篇文章,我想展示 expvar 包的工作原理,以及它的使用。 我要晨读  相关阅读: 网页链接  网页链接 

已有459人晨读

Go应该添加为类型创建替代等效名称的能力,以便在代码库重构期间渐进代码修复。本文解释了对于这种能力的需求,以及没有它对于今天的大型Go代码库的影响。本文还探讨了一些潜在的解决方案,包括在开发(但没有包含在)Go1.8中提出的别名功能。然而,本文不是任何具体解决方案的提案。相反,它旨在作为Go社区讨论Go 1.9中应该包含哪些解决方案的开始。文章较长,但绝对值得一读。 我要晨读

已有291人晨读

一直以来,我对修饰器这种编程模式情有独钟,之前写过Python的,现在写篇Go相关的。不过,Go 语言的“糖”不多,而且又是强类型的静态无虚拟机的语言,所以,很难做到像Java和Python那样的优雅。当然,如果你知道有更多的写法,请你一定告诉我。 我要晨读

已有598人晨读

从小案例学习Go语言,知识点包括:使用github.com/tealeg/xlsx包读取xlsx文件;使用regexp包实现正则表达式判断;使用net/smtp包发送电子邮件;使用交叉编译命令生成不同系统上的可执行文件。 我要晨读

已有5259人晨读

【Go语言内幕系列】本文是 Golang 内部机制探索系列博客的后续。这个系列博客的目的是探索 Go 启动过程,这个过程也是理解 Go 运行时(runtime)的关键之处。本文中我们将一起去看看启动过程的第二个部分,分析参数是怎么被初始化的及其中有哪些函数调用等等。 我要晨读

已有5100人晨读

【Go语言内幕系列】启动过程是理解 Go 语言运行时工作原理的关键。如果你想继续深入了解 Go,那么分析启动过程就非常重要。因此第五部分就着重讲解 Go 运行时,特别是 Go 程序的启动过程。 我要晨读

已有1943人晨读

【Go语言内幕系列】今天,我们来看一下 Func 结构体,还会讨论一些关于 Go 垃圾回收的一些细节。Go语言内幕(4):目标文件和函数元数据。 我要晨读

已有1596人晨读

【Go语言内幕系列】本文将会讨论关于 Go 链接器、目标文件(object file)以及重定位(relocation)相关的内容。为什么要关注这些东西呢?如果你想学习任何一个大项目的内部机制,那么你首先要做的一件事就是学会将其分割成不同的部件或者模块。接下来,你需要搞懂这些模块向外提供的接口。在 Go 中,编译器、链接器与运行时就是这样的高层次模块。编译器与链接器之间的接口就是目标文件,所以我们今天就从目标文件开始。 我要晨读

已有982人晨读

【Go语言内幕系列】当你通过接口引用使用一个变量时,你知道 Go 运行时到底做了哪些工作吗?这个问题并不容易回答。这是因为在 Go 中,一个类型实现了一个接口,但是这个类型并没有包含任何对这个接口的引用。在这里,让我们更加深入地探索 Go 编译器:创建一个简单的 Go 程序来看一下 Go 内部在类型转换时到底做了哪些工作。通过这个例子,我会解释结点树是如何生成并被使用的。同样地,你也可以将这篇博客的知识应用到其它 Go 编译器特征的研究中。 我要晨读

已有1130人晨读

【Go语言内幕系列】这个系列博客主要为那些对 Go 基本知识已经有一定了解,又希望对其内部细节进行更深一步地探索的人准备的。今天这一篇主要分析 Go 源代码的基本结构以及 Go 编译器的某些内部细节。读完这篇博客后,你会得到下面三个问题的答案:Go 源代码结构是什么样子的?Go 编译器是如何工作的?Go 语言中的结点树的基本结构是什么样的? 我要晨读

已有1168人晨读

目前,Go语言已经成为构建系统、服务器,特别是微服务的热门选择。Teamwork团队在去年写了近20万行Go代码,建造了一堆速度奇快的小型HTTP服务,本文列出了他们总结的9条经验教训,可做参考。 我要晨读

已有2851人晨读

【微服务实战序列】这是用微服务开发应用系列博客的第七篇也是最后一篇。第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点;接续文章讨论了微服务架构不同方面:使用API网关,进程间通信,服务发现,事件驱动数据管理以及部署微服务。本篇,我们将探讨将应用从单体式架构迁移到微服务架构需要考虑的策略。 我要晨读

已有2034人晨读

Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应用场景?是否值得牺牲语言的简洁性使其速度更快?让我们来一起看一下Go语言性能优化的几个方面:语言特性、内存管理、并发,并根据这些做出合适的优化决策。 我要晨读

已有2037人晨读

【微服务实战序列】这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点。随后的文章讨论了微服务不同方面:使用API网关,进程间通讯,服务发现和事件驱动数据管理。这篇文章,我们将讨论部署微服务的策略。 我要晨读

已有2333人晨读

【微服务实战序列】本文是使用微服务创建应用系列的第五篇文章。第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点;第二和第三篇描述了微服务架构模块间通讯的不同方面;第四篇研究了服务发现中的问题。本篇中,我们从另外一个角度研究一下微服务架构带来的分布式数据管理问题。 我要晨读

已有1124人晨读

【微服务实战序列】这是关于使用微服务架构创建应用系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点。第二和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现相关问题。 我要晨读

已有1696人晨读

【微服务实战序列】在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的。但是一个基于微服务的分布式应用是运行在多台机器上的。一般来说,每个服务实例都是一个进程。在这篇文章中,我们将讨论系统服务之间如何通信。 我要晨读

已有1383人晨读