《Go语言核心编程》一书9月底上市了,本文是《Go语言核心编程》的前言部分,推荐给大家,希望这本书能帮助到大家更好的学习Go语言。
## 书籍概况
Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言精华、优美、也是重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用;在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用图描述并发程序的模型,通俗易懂,这也是本书读特点。此外本书还拿出一整章内容介绍Go语言编程过程中可能遇到的陷阱,不仅告诉读者陷阱是什么,正确使用方式是什么,同时也给出出现这种问题的根本原因,使读者后续能够避免犯同样的错误。本书最后从哲学角度论述下Go语言的编程思想,相信Go语言爱好者一定可以从书中找到自己感兴趣内容。
感兴趣的点击图片链接书籍的详情。
[![go.jpg](https://static.studygolang.com/181101/941eeee1d29d62c27098a71e8df583df.jpg )](https://item.jd.com/12437839.html)
## 写作背景
2007 年,Go 语言诞生于谷歌公司,2009 年开源,2012 年推出1.0 版本,曾两次获得TIOBE年度语言(2009 年和2016 年)。2012 年起,全球大量的开源项目开始使用Go 语言进行开发,目前Go 语言已经成为云计算领域事实上的标准语言,特别是在容器领域,诞生了一大批优秀的开源软件,如Docker、Kubernetes 等。2017 年区块链技术在国内大热,区块链两个大的技术平台以太坊(Ethereum)和超级账本(Hyperledger)子项目Fabric 都是基于Go 语言构建的。Go 语言的应用领域逐步扩大,目前在区块链、云计算、中间件和服务器编程领域显现出明显的优势。Go 语言最先在云计算公司盛行,随后大量的互联网初创企业将Go 语言作为后台主要开发语言。目前,无论互联网公司里的独角兽,还是BAT(百度、阿里巴巴、腾讯),都已将Go语言作为其技术栈的重要组成部分。市场对于Go 语言编程人才的需求量也在持续上升。
目前,Go 语言编程类图书有如下几个类别。
### 基础全面型
七牛团队写作和翻译的几本书(《Go 语言编程》《Go 程序设计语言》等),系统地介绍了Go 开发的基础知识,为Go 语言在国内的推广做出了很大的贡献。
### 源码深入型
雨痕的《Go 语言学习笔记》,上半部分是对 Go 语言基础知识的总结,下半部分对源码进行了分析,是学习Go 语言内部原理非常好的参考书。
### 专业领域型
专注于介绍某个应用领域,比如谢孟军的《Go Web 编程》,这类图书主要是介绍使用Go
语言在某个领域进行开发的相关知识。
市面上Go 语言的图书这么多了,为什么又要写一本,本书和市面上的图书有什么区别呢?这也是我写这本书之前就认真思考过的问题。我发现市面上缺少介绍Go 语言核心特性和使用陷阱的书。Go 语言核心特性包括类型系统、接口、并发,这三部分是Go 语言最精华、最优美、最重要的语言特性。于是我就围绕这三个主题写了本书,书名就叫《Go 语言核心编程》。以类型系统为例,Go 语言中的类型涉及简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型及类型字面量等诸多概念,这些在先前的书籍里没有系统地介绍过,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会使用;在并发编程中给出了5 个并发编程范式并系统地介绍了context 标准库,这也是本书特有的。
## 内容简介
本书共9 章,围绕如下主题展开:基础知识(第1 章)、语言核心(第2 章~第7 章)、工程管理(第8 章)和编程哲学(第9 章)。
### 基础知识
第1 章介绍Go 语言编程的基础知识。基础知识部分力求从系统性的角度讲述Go 语言简洁的语法知识,试图帮助读者了解Go 语言源程序基本结构,这是本书不同于其他书籍的地方。本章先对Go 的源程序进行整体介绍,然后从词法分析的角度介绍Go 语言的各个token,接着介绍Go 语言的基础语法:变量和常量、数据类型及控制结构,让读者学习Go 语言的语法知识时可以“既见树木,又见森林”。
### 语言核心
本书的第2~7 章讲解Go 语言核心知识,这部分是本书最核心、最重要的部分,主要围绕如下4 个主题展开。
**1.类型系统**
本书用3 章的篇幅来讲解Go 语言的类型系统,分别是第2 章函数、第3 章类型系统和第4章接口。类型系统是Go 语言的灵魂,Go 语言小而美的类型系统是其区别于其他语言的显著特征。函数在Go 语言中是“一等公民”,非侵入式的接口设计也很有特点。类型系统是本书的一条主要线索,几乎贯穿本书的所有章节,在反射章节里会对Go 的类型系统做一个总结。掌握类型系统是写好Go 程序的关键。
**2.并发编程**
第5 章介绍Go 并发编程,并发编程的原生支持是Go 语言显著的语言特征。“不要通过共享内存来通信,而是通过通信来共享内存”,本章首先讲解语言层面对并发的支持,接着讲解context 标准库的知识,最后讲解常用的并发范式和Go 并发模型。
**3.反射**
第6 章介绍Go 语言反射的相关知识。反射是Go 语言的高级特性,反射是把“双刃剑”,用好了会有强大的威力,但由于其复杂性且易产生运行时panic,因此反射又表现出脆弱性。Go 语言没有提供泛型支持,所以在开发框架和大型系统中反射是必须面对的一个技术点,市面上的图书对这部分的介绍不多,本书分类总结了Go 的反射API,尽可能梳理出条理清晰的API结构;同时以类型系统和接口底层实现为基础来介绍反射;最后介绍著名的Web 框架martini中使用的依赖注入库inject。
**4.陷阱和习惯用法**
第7 章介绍Go 语言陷阱和一些习惯用法,包括Go 语言使用过程中容易出错和初学者容易困惑的知识点。Go 语言虽然设计简洁,但在某些方面还是有瑕疵的,比如 defer 陷阱、短变量的声明range 临时变量共享等。同时Go 又有其鲜明的书写格式和习惯用法,本章的最后会介绍这些内容。
### 工程管理
Go 语言是一门面向工程的语言,而不是学术界的产物,第8 章介绍Go 语言工程管理方面的知识,主要介绍Go 的编程环境、命名空间和包管理的相关内容。
### 编程哲学
第9 章讨论编程哲学,这部分内容不是介绍编程细节知识,读者可以把它当作散文来读。先对Go 语言编程哲学做一个总结:少即是多,世界是并行的,组合优于继承,面向接口编程,等等,试图从哲学的角度来阐述这些设计思想的先进性。最后介绍Go 语言的里程碑事件及未来的发展方向。
## 相关约定
本书使用Go 代表Go 语言的简写,使用go 表示Go 语言的并发关键字,使用goroutine 代表Go 语言中的并发执行体。通道和chan 都代表Go 语言的通信管道。切片和slice 都表示Go语言内置的可变数组。本书使用实例或者类型实例表示具体类型的变量,而没有使用传统语言对象的概念。标准库和标准包会混用,都是指Go 语言自带的标准库。复制和拷贝具有相同的语义,都表示将数据复制一份并拷贝到另一处内存空间。本书是基于Go 1.10.2 写作的,新版本的变动请读者以官方文档为准。截至本书出版时,Go 1.11 发布,官方推出了新的包管理工具go mod,go mode 兼容dep,dep 仍可放心使用,go mod 是新增的功能需要一段时间成熟。
## 总结
本书绝大大部分内容是笔者六年来学习和实践Go语言过程中的总结和感悟,成书过程中也参阅了部分网上和官方资料,由于能力有限,错误或者疏忽之处难免发生,欢迎读者指正,以便我们及时修订,我的邮箱是email.tata@qq.com。
有疑问加站长微信联系(非本文作者))