《学习 Go 语言(第二版)》是一本 Go 语言的快速入门。 本书的第一版翻译自 Miek Gieben 开始于 2010 年的开源书籍 “Learning Go[@learning_go]”。 第二版将脱离严格翻译原英文版的形式,重新编排内容,并撰写新的内容。 由于 Go 仍然是一门年轻的语言,还在快速的迭代与发展的过程中。 所以本书的描述会努力与 Go 语言的最新发行版本的功能保持一致。
这本书的目标是为这个新的、革命性的语言提供一个快速指南。 所以本书将假设你已经在系统中安装了 Go,但读者仍然可以在附录中找到流行操作系统的安装指南。
本书采用开源创作的方式,所有素材可以在 GitHub 上的项目 中获得。 书中内容使用 Attribution-NonCommercial-ShareAlike 3.0 Unported License 授权。 书中的所有示例代码使用 Apache License version 2.0 授权。
感谢所有为英文原版 Learning Go 和《学习 Go 语言》第一版作出贡献的朋友们。
无论如何得感谢 Miek Gieben 在 Learning Go 中构建起来的良好的内容框架, 和他使用 Go 语言开发的 markdown 处理工具 mmark [@mmark]。没有他的分享与贡献,本书的所有内容都无法成型。
这本书的目标读者是那些有基本的编程概念,并且已经对解某些主流编程语言有所了解。 主流编程语言包括但并不限于 C[@c],C++[@cpp],Java[@java],PHP[@php],Python[@python] 等等。 请注意,这不是一本教你如何编程的书。本书的主要目标是教你如何使用 Go 来在现代工业环境下工作。 学习某样新语言的最佳的方式就是通过编写程序来探索它。 因此每章都包含了若干练习、答案和答案解析来让你熟悉这个语言。 每个练习都有独立的编号。在练习编号后面的圆括号中标明了该题的难度。
- 易
- 中
- 难
并且为了帮助索引,每个题目都有一个简短的标题。例如:
Q1. (中) map 函数
编号 Q1 的这个问题是一道中等难度的关于 map() 函数的练习。相关答案会在练习的下一页提供。答案的顺序和练习一致并使用类似的编号方式,以 A 开头并附带序号。例如:
A1. map 函数
答案只是提供一种思路和参考,不是绝对的标准,也不是问题的最佳解。对于那些没有答案的练习,它们将用星号标记出来。
在书中的代码使用了下面的约定:
- 代码、关键字和注释使用代码块显示;
- 代码中对某行代码的说明使用 Go 行注释符号
//
在同一行后标识; - 较长的注释使用
/* ... */
或使用行注释符号配合数字,例如 // <<1>> 标识后,在随后的内容中详细解释。 - 行号在右边显示;
- shell 的例子使用 $ 作为输入符;
- 用户在 shell 输入内容的例子用黑体显示,系统反馈用斜体显示;
- 强调的段落会使用缩进,并在左边使用符号 标识。
简介 : 本章对 Go 语言本身进行了介绍,同时对相关学习文档进行了罗列。让读者对于他们将要学习的这门语言有一个大致的概念。
[语言基础] : 本章将讨论语言中可用的基本类型、变量和控制结构
[函数与数据] : 函数是 Go 程序中的重要基本部件,通过函数可以对数据进行操作。同时本章也会对 Go 的垃圾自动回收和内存分配进行简要介绍
[包与模块] : 通过包可以整合功能相关的函数与数据,而模块可以更加方便的管理包。同时如何编写文档和进行单元测试也会是本章的重要内容
[接口] : Go 语言的接口与传统意义的面相对象语言的接口大相径庭,而接口的设计是这个语言的核心思想之一
[并发]
: 通过引入关键字 go
,Go 语言使并发程序的编写变得异常轻松。而在这个语言中的并发单元是一种轻线程 goroutine
。而引入 channel
来在 goroutine
之间通讯也使得传统的并发编程任务变得轻松起来
[通讯] : 本章会对标准库中的文件读写、网络通讯等常用库进行简单介绍,并示范如何从头编写一个完整的 Go 程序