[翻译]Go 数据结构

关于 Go 的内存结构在 Go 内存模型 中已经有介绍,但是内容相对简单,许多细节也一带而过。Ross Cox 的这篇文章 Go Data Structure 讲解得比较系统也很全面的一篇。翻译至此,希望能对大家有帮助。 2009 年的旧文,发现自己当时没有翻译完。所以再次做了增补和修改。如果我没记错,应该已经有人在 OSC 上发表过同一篇文章的翻译了。大家对照参考阅读吧。 ————翻译分隔线———— Go 数据结构 每当给新手介绍 Go 的时候,我发现为了建立起关于哪个操作成本更加高昂的正确观念,将 Go 如何为其值分配内存说明清楚会很有帮助。本文介绍了基础类型、结构体、数组和切片(slice)。

[翻译] Nginx 备战-优化指南

对于上线优化这个事情,个人来说更加倾向于使用一些快速的调优模式首先来解决 80% 的问题。感觉上这篇“Battle ready Nginx – an optimization guide”讲得还是很到位了。所以随手翻译了,分享给大家。 ———— 翻译分隔线 ———— Nginx 备战-优化指南 作者:Zachary Orr 大多数关于 Nginx 的指南只告诉你那最基本的部分:apt-get 一个包,修改这里和那里的某些行,然后就得到了一个 web 服务器!而在大多数情况下,一个常见的 nginx 安装也能为你的网站提供良好的服务。然而如果你的确想进一步压榨 nginx 的性能,那么就必须走得更远一些。在这个指南中,我将会解释通过调整 nginx 中的哪些设置可以得到更好的性能,来应对大量客户端请求。同时要注意,这不是完整的调优指南。只是对一些可以调整来改进性能的设置的简单概述。请务必具体情况具体对待。

[翻译] go build 命令是如何工作的?

之前 Dave Cheney 已经为我们讲解过了 Go 是如何用 go 编译自己的。这里,他继续给大家讲解一下 go build 命令是如何工作的(原文)。 ————翻译分隔线———— go build 命令是如何工作的? 本文以 Go 的标准库为例,介绍了 Go 编译过程的工作原理。

[翻译] Lua 做对了什么?

来自邮件列表的旧文一篇,不过很有料。加上最近正好大量用到 Lua,所以翻译出来。说实话,跟 Go 配合的 Lua 的封装,比已有的 Python 封装要好用很多。 ————翻译分隔线———— 主题:回复:Lua 做对了什么? 发信人:Miles Bader 日期:2012-04-09 星期一 17:03:27 +0900 Emeka 写到: > 大家好, > > 我是一名南森大学的学生,我选择了 Lua 语言作为业余爱好。 > 我想知道到底是什么让这个语言与众不同? > 它为编程语言带来了什么?还有特别的特性。 > > 此致,\Emeka > — > *Satajanus Nig. Ltd > > *

[翻译]Go tip(2013-08-23)带来的变化

Dominik Honnef(之前搞错成 Russ Cox 了)在 What’s happening in Go tip (2013-08-23) 中介绍了一些关于 Go 语言的一些变化。这些变化包含了语法、性能、潜在风险和工具链。并且,这些新的东西可能会随着 Go 1.2 版本一同发布。为了方便中文读者,翻译在此。 ————翻译分隔线———— Go tip(2013-08-23)带来的变化 上周我发布了关于 Go tip 的变化的系列文章的第一篇。得到了大量的肯定,因此这是第二篇。感谢你的支持,并且希望你能像喜欢第一篇文章一样喜欢本文。 有哪些变化 这次,将对以下内容进行探讨: 关于切片的新语法 性能改进 快速的,常量时间的 P-256 椭圆曲线 godoc 到哪去了?

[翻译]Go 的调度器

近期工作有些调整,所以这篇东西用了差不多两个星期才翻译完。想起 @Fenng 几年前跟我说的关于行业和工作的话,虽然出发点不太一样,但是结论还真是正确啊! 工作上的变动,就不多扯了。原文在此《The Go scheduler》。 ————翻译分割线———— Go 的调度器 Daniel Morsing 概述 Go 1.1 重要特性之一就是由 Dmitry Vyukov 贡献的新调度器。无需对程序进行任何调整,新的调度器就可以为 Go 程序带来令人兴奋的性能提升。因此我觉得有必要就此写点什么。 在本博文所述的大多数内容都已经在原始的设计文档中有所介绍。那是一篇相当全面的文档,同时也相当专业。 你想要了解的关于新的调度器的一切都能在那篇文档里找到,而这篇博文描绘了整体情况,所以优略得所。

[翻译]Go 的竞态检测器

理解竞态对于并发编程来说很重要,如果能通过某种手段来了解程序中存在的竞态,以便进一步的调整避免竞态,也是非常有效的优化手段。Go 1.1 的工具链引入了竞态检测器可以检测并展示程序中存在的竞态情况。Go 团队撰写了博文详细介绍了这一工具的原理和使用。原文在此《Introducing the Go Race Detector》。 ————翻译分隔线———— Go 的竞态检测器 Dmitry Vyukov 和 Andrew Gerrand 竞态条件几乎是最为隐蔽和难以发现的程序错误。它们通常会导致诡异且无法解释的错误,尤其是在代码已经部署到生产环境很长时间之后。虽然 Go 的并发机制使得编写清晰的并发代码变得容易,但是它们无法避免竞态条件。认真、勤快的测试是必须的。而工具可以给予帮助。 我们很高兴的宣布 Go 1.1 包含了竞态检测器,一个用于发现 Go 代码中的竞态条件的新工具。它当前在 64 位 x86 处理器的 Linux、MacOS 和 64 位 x86 处理器的 Windows 系统中可用。

[翻译]Go 是如何用 go 编译自己的

原文在此《How Go uses Go to build itself》,作者为 Dave Cheney。 ————翻译分隔线———— Go 是如何用 go 编译自己的 这篇文章基于 2013 年四月中旬我为悉尼 Go 用户组做的一次关于 Go 构建过程的演讲而成。 在邮件列表或 IRC 的频道里经常有人寻求关于 Go 编译器、运行时和内部原理的细节文档。当前,关于 Go 的内部原理的权威文档的来源就是我鼓励每个人都去阅读的源代码。虽然这样说,但是从 Go 1.0 发布以来 Go 的构建过程就已经稳定了,因此将其记录在这里或许也会有其相应的价值。 这篇文章大致介绍了 Go 编译过程的九个步骤,从源代码开始,结束于经过充分测试的安装好的 Go 。为了简明扼要,所有路径都相对与源代码检出的根路径,$GOROOT/src。 你应当通过阅读在 golang.org 网站上的从源代码安装 Go 来了解更多背景知识。

[翻译]绝妙的 channel

在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。 原文在此:http://dave.cheney.net/2013/04/30/curious-channels ————翻译分隔线———— 绝妙的 channel 在 Go 编程语言中,channel 是一个闪耀的特性。它提供了一种强大的、在不使用锁或临界区的情况下,从某个 goroutine 向其他 goroutine 发送数据流的方法。 今天我想讨论关于 channel 的两个重要的特性,这些特性不但使其在控制数据流方面极为有用,而且用在流程控制方面也十分有效。

[翻译] Go 1.1 介绍

由于年后工作实在太忙,一直也没写点什么。不过这篇我觉得值得,所以…… 原文:https://tip.golang.org/hg/doc/go1.1.html 原文链接我进行了替换,现在指向 tip 大多数应该正确吧。不过如果是 Go 1.1 正式发布半年后,我可不保证了。 ————翻译分隔线———— Go 1.1 介绍 Go 第一版(简称 Go 1 或 Go 1.0)发布于 2012 年三月,这个版本提供了稳定的 Go 语言和库。其稳定性让全世界 Go 用户社区和相关系统茁壮成长。从那时起,就发布了若干个“关键点”——1.0.1、1.0.2 和 1.0.3。这些点的发布修复了若干已知 bug,但是对于实现本身并没有进行修改。 这个新的发布版,Go 1.1,在保持兼容性的前提下添加了若干重要的(当然,向后兼容)语言变化,而库变化的清单也很长(也向后兼容),还有在编译器、库和运行时环境实现的主要工作。焦点是性能。测试并不是十分精确,但是对于许多测试程序来说都有着重要的、有时是戏剧性的性能改善。我们相信,通过升级 Go 的安装包,并且重新编译,许多用户的程序也能让人体会到这一改进。