Go语言核心编程
  • 推荐2
  • 收藏5
  • 浏览3.5K

Go语言核心编程

李文塔 (作者) 

  • 书  号:978-7-121-34911-9
  • 出版日期:2018-09-25
  • 页  数:280
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥79.00
市面上Go语言编程类图书有很多,本书和其他Go语言编程类图书有什么区别?这是每一个读者最关心的问题,也是笔者写本书前最关心的问题,本书能给读者带来什么价值?笔者发现市面上缺少一本系统性介绍Go语言核心语言特性和语言陷阱的书,这两点就是本书的主题。Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言最精华、最优美、也是最重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用;在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用图描述并发程序的模型,通俗易懂,这也是本书特有的。此外本书还拿出一整章内容介绍Go语言编程过程中可能遇到的陷阱,不仅告诉读者陷阱是什么,正确使用方式是什么,同时也给出出现这种问题的根本原因,使读者后续能够避免犯同样的错误。本书最后从哲学角度论述下Go语言的编程思想,相信Go语言爱好者一定可以从书中找到自己感兴趣内容。
 
本书围绕三大的主题展开:
1. Go语言精华部分 ——并发和小而美的类型系统;
2. Go陷阱——这些主要论述使用Go过程中大家很困惑或者容易出错的地方;
3. Go语言的哲学——总结Go的设计哲学,懂得Go作者的设计意图,才能更好地使用该语言。
写作背景
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个主题展开。
类型系统
本书用3章的篇幅来讲解Go语言的类型系统,分别是第2章函数、第3章类型系统和第4章接口。类型系统是Go语言的灵魂,Go语言小而美的类型系统是其区别于其他语言的显著特征。函数在Go语言中是“一等公民”,非侵入式的接口设计也很有特点。类型系统是本书的一条主要线索,几乎贯穿本书的所有章节,在反射章节里会对Go的类型系统做一个总结。掌握类型系统是写好Go程序的关键。
并发编程
第5章介绍Go并发编程,并发编程的原生支持是Go语言显著的语言特征。“不要通过共享内存来通信,而是通过通信来共享内存”,本章首先讲解语言层面对并发的支持,接着讲解context标准库的知识,最后讲解常用的并发范式和Go并发模型。
反射
第6章介绍Go语言反射的相关知识。反射是Go语言的高级特性,反射是把“双刃剑”,用好了会有强大的威力,但由于其复杂性且易产生运行时panic,因此反射又表现出脆弱性。Go语言没有提供泛型支持,所以在开发框架和大型系统中反射是必须面对的一个技术点,市面上的图书对这部分的介绍不多,本书分类总结了Go的反射API,尽可能梳理出条理清晰的API结构;同时以类型系统和接口底层实现为基础来介绍反射;最后介绍著名的Web框架martini中使用的依赖注入库inject。
陷阱和习惯用法
第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。
感谢
本书原稿基于GitBook+Markdown在Linux下使用Vim完成写作,原始稿件版式简单,非常感谢电子工业出版社博文视点编辑部的帮助,使其变成一本优美的纸质书。非常感谢曾刘刚通读全书,帮助审稿;同时感谢宫振飞、胡宸源、宋磊在成书过程中给予的宝贵意见。在时间碎片化的今天,一字一句地写完一本书是对自己毅力和耐心的极大考验,感谢在成书过程中妻子黄静给予的鼓励和支持。封面上可爱的地鼠来自上田拓也的作品,非常感谢上田先生欣然授权本书使用。
李文塔

目录

目录
第1章 基础知识
1.1 语言简介
1.1.1 Go语言的诞生背景
1.1.2 语言特性
1.1.3 Go语言的特性
1.1.4 总结
1.2 初识Go程序
1.3 Go词法单元
1.3.1 token
1.3.2 标识符
1.3.3 操作符(operators)和分隔符(delimiters)
1.3.4 字面常量
1.3.5 总结
1.4 变量和常量
1.4.1 变量
1.4.2 常量
1.5 基本数据类型
1.5.1 布尔类型
1.5.2 整型
1.5.3 浮点型
1.5.4 复数类型
1.5.5 字符串
1.5.6 rune类型
1.6 复合数据类型
1.6.1 指针
1.6.2 数组
1.6.3 切片
1.6.4 map
1.6.5 struct
1.7 控制结构
1.7.1 if语句
1.7.2 switch语句
1.7.3 for语句
1.7.4 标签和跳转
第2章 函数
2.1 基本概念
2.1.1 函数定义
2.1.2 多值返回
2.1.3 实参到形参的传递
2.1.4 不定参数
2.2 函数签名和匿名函数
2.2.1 函数签名
2.2.2 匿名函数
2.3 defer
2.4 闭包
2.4.1 概念
2.4.2 闭包的价值
2.5 panic和recover
2.5.1 基本概念
2.5.2 使用场景
2.6 错误处理
2.6.1 error
2.6.2 错误和异常
2.7 底层实现
2.7.1 函数调用规约
2.7.2 汇编基础
2.7.3 多值返回分析
2.7.4 闭包底层实现
第3章 类型系统
3.1 类型简介
3.1.1 命名类型和未命名类型
3.1.2 底层类型
3.1.3 类型相同和类型赋值
3.1.4 类型强制转换
3.2 类型方法
3.2.1 自定义类型
3.2.2 方法
3.3 方法调用
3.3.1 一般调用
3.3.2 方法值(method value)
3.3.3 方法表达式(method expression)
3.3.4 方法集(method set)
3.3.5 值调用和表达式调用的方法集
3.4 组合和方法集
3.4.1 组合
3.4.2 组合的方法集
3.5 函数类型
第4章 接口
4.1 基本概念
4.1.1 接口声明
4.1.2 接口初始化
4.1.3 接口方法调用
4.1.4 接口的动态类型和静态类型
4.2 接口运算
4.2.1 类型断言(Type Assertion)
4.2.2 类型查询(Type Switches)
4.2.3 接口优点和使用形式
4.3 空接口
4.3.1 基本概念
4.3.2 空接口的用途
4.3.3 空接口和nil
4.4 接口内部实现
4.4.1 数据结构
4.4.2 接口调用过程分析
4.4.3 接口调用代价
4.4.4 空接口数据结构
第5章 并发
5.1 并发基础
5.1.1 并发和并行
5.1.2 goroutine
5.1.3 chan
5.1.4 WaitGroup
5.1.5 select
5.1.6 扇入(Fan in)和扇出(Fan out)
5.1.7 通知退出机制
5.2 并发范式
5.2.1 生成器
5.2.2 管道
5.2.3 每个请求一个goroutine
5.2.4 固定worker工作池
5.2.5 future模式
5.3 context标准库
5.3.1 context的设计目的
5.3.2 基本数据结构
5.3.3 API函数
5.3.4 辅助函数
5.3.5 context的用法
5.3.6 使用context传递数据的争议
5.4 并发模型
5.4.1 CSP简介
5.4.2 调度模型
5.4.3 并发和调度
第6章 反射
6.1 基本概念
6.1.1 基本数据结构和入口函数
6.1.2 基础类型
6.1.3 类型汇总
6.2 反射规则
6.2.1 反射API
6.2.2 反射三定律
6.3 inject库
6.3.1 inject是什么
6.3.2 依赖注入和控制反转
6.3.3 inject实践
6.3.4 inject原理分析
6.4 反射的优缺点
6.4.1 反射的优点
6.4.2 反射的缺点
6.4.3 反射的最佳实践
第7章 语言陷阱
7.1 多值赋值和短变量声明
7.1.1 多值赋值
7.1.2 短变量的声明和赋值
7.2 range复用临时变量
7.3 defer陷阱
7.4 切片困惑
7.4.1 数组
7.4.2 切片
7.5 值、指针和引用
7.5.1 传值还是传引用
7.5.2 函数名的意义
7.5.3 引用语义
7.6 习惯用法
7.6.1 干净与强迫症
7.6.2 comma,ok表达式
7.6.3 简写模式
7.6.4 包中的函数或方法设计
7.6.5 多值返回函数
第8章 工程管理
8.1 编程环境
8.1.1 环境搭建
8.1.2 工程结构
8.1.3 交叉编译
8.2 命名空间和作用域
8.2.1 命名空间
8.2.2 作用域
8.2.3 变量覆盖
8.3 包的基本概念
8.3.1 基本概念
8.3.2 包引用
8.3.3 包加载
8.4 第三方包管理
8.4.1 vendor
8.4.2 dep
第9章 编程哲学
9.1 Go语言设计哲学
9.1.1 少即是多
9.1.2 世界是并行的
9.1.3 组合优于继承
9.1.4 非侵入式的接口
9.1.5 总结
9.2 Go语言发展史
9.2.1 站在巨人的肩膀上
9.2.2 里程碑
9.3 未来
9.3.1 争议
9.3.2 Go 2

全部展开

本书勘误

印次
  • 页码:10  •  行数:11  •  印次: 1

    内置函数中Print和Printin以小写字母开头

    吴彦祖 提交于 2019/3/21 21:22:58
    陈晓猛 确认于 2019/4/11 10:45:11
  • 页码:10  •  行数:内置函数15个  •  印次: 1

    Print,Printin==》print,println

    世有悲苦 提交于 2019/4/3 14:18:37
    陈晓猛 确认于 2019/4/11 10:44:23
  • 页码:10  •  行数:8  •  印次: 5

    整型中 unint8 应改为uint8

    Biem 提交于 2020/1/17 13:10:17
    陈晓猛 确认于 2020/2/20 10:31:03
  • 页码:12  •  行数:21  •  印次: 5

    赋值复核运算符应改为复合赋值运算符

    Biem 提交于 2020/1/17 13:49:58
    陈晓猛 确认于 2020/2/20 10:30:52
  • 页码:22  •  行数:3  •  印次: 1

    b := image(v)错误, 应该为 b := imag(v)

    button 提交于 2019/5/25 8:36:23
    陈晓猛 确认于 2019/5/28 8:47:18
  • 1
  • 2
  • 3
  • 4
  • 5

读者评论

  • semi

    请问有没有勘误合订的地方,累计信息?

    semi发表于 2020/8/8 19:33:49
  • 凉宫春日

    第三章 91页 c.Print(),的值value=50,应该是value=20

    凉宫春日发表于 2019/7/5 15:43:25
  • 凉宫春日

    第三章 90页 表达式普通方法调用 t.Get(t) 应该是t.Get()

    凉宫春日发表于 2019/7/5 15:42:15

下载资源

  • gobook-code.zip

推荐用户

  • jueshi

    jueshi

  • 爱吃辣白菜

    爱吃辣白菜

深圳SEO优化公司光明seo哪家好聊城网站优化按天计费报价文山关键词按天扣费多少钱九江百姓网标王推广多少钱信阳网站优化按天收费公司临沂关键词排名包年推广公司平凉网站优化按天收费哪家好大同seo优化苏州网站搜索优化公司南昌关键词排名包年推广哪家好和田企业网站建设多少钱济南关键词按天计费多少钱锦州英文网站建设价格眉山百度关键词包年推广多少钱衢州关键词排名包年推广价格漳州关键词按天扣费推荐平凉SEO按效果付费哪家好红河网站优化软件公司南宁百度关键词包年推广泰州百度网站优化排名哪家好广东SEO按天计费哪家好伊犁seo报价淮安百度竞价多少钱濮阳网站优化软件报价广元关键词按天扣费无锡seo网站推广报价鸡西SEO按天计费公司大鹏关键词排名多少钱咸宁网站推广工具价格横岗百度关键词包年推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化