主编推荐语
全面掌握Go语言语法、编程及应用。
内容简介
Go语言也称为Golang,它出自计算机科学领域的三位巨匠Ken Thompson、Rob Pikeh和Robert Griesemer之手,在2009年由Google公司正式发布。
Go语言是一种静态强类型、编译型、并发型及具有垃圾回收功能的开源编程语言。它的主要目标是“兼具Python等动态语言的开发速度和C/C++等编译型语言的性能与安全性”。Go语言语法简单,规则严谨。
此外,Go语言拥有功能完善、质量可靠的标准库,借助这些标准库,可以快速开发基础程序,极大降低学习与开发成本。
Go语言拥有完整的工具链,编译、格式化、错误检查功能和帮助文档及第三方工具包都很完善,可以保证代码正确稳定的运行。正因为Go语言具有如此众多的特性,它被誉为“21世纪的编程语言”,成为一种国际化的新语言。
本书由知名IT开发者周家安编著,内容通俗易懂、理论全面、实例丰富。Go(Golang)语言在语法上与C、C++语言相似,是一门开源的编程语言,可用于编写简单的、实用的应用程序。Go语言支持内存管理和垃圾回收(GC)机制,使用Go协程可以轻松实现并发计算。
本书通过通俗易懂的文字,着重讲解Go语言编程的基础知识,同时配有丰富的示例。主要内容包括开发环境配置及语法基础,代码包(Package),内置运算符与数据类型,代码流程控制,函数式、接口与结构体,数组、切片与映射类型,反射技术,管理命令行参数,I/O、数据压缩及文件操作,加密与解密,网络编程,Go协程。
目录
- 版权信息
- 内容简介
- 作者简介
- 编辑推荐
- 前言 FOREWORD
- 第1章 准备工作
- 1.1 安装Go语言编译器
- 1.2 配置环境变量
- 1.3 验证Go语言编译器的工作状态
- 第2章 语法基础
- 2.1 代码结构
- 2.2 main包与main函数
- 2.3 Go语句
- 2.4 代码块
- 2.5 注释
- 2.6 使用Go语言编译器
- 第3章 运算符
- 3.1 操作数
- 3.2 算术运算符
- 3.2.1 四则运算符
- 3.2.2 取余运算符
- 3.2.3 如何实现指数运算
- 3.2.4 自增与自减运算符
- 3.3 比较运算符
- 3.4 逻辑运算符
- 3.5 位运算符
- 3.5.1 按位与
- 3.5.2 按位或
- 3.5.3 取反
- 3.5.4 位移
- 3.5.5 按位异或
- 3.5.6 清除标志位
- 3.6 成员运算符
- 3.7 取地址运算符
- 3.8 复合运算符
- 3.9 运算符的优先级
- 第4章 程序包管理
- 4.1 package语句
- 4.2 程序包的目录结构
- 4.3 导入语句
- 4.4 初始化函数
- 4.5 模块
- 4.5.1 go.mod文件的基本结构
- 4.5.2 创建go.mod文件
- 4.5.3 编辑go.mod文件
- 4.5.4 使用本地模块
- 4.6 成员的可访问性
- 第5章 变量与常量
- 5.1 变量的初始化
- 5.2 组合赋值
- 5.3 匿名变量
- 5.4 常量
- 5.5 批量声明
- 5.6 变量的作用域
- 5.7 变量的默认值
- 第6章 基础类型
- 6.1 字符与字符串
- 6.1.1 rune类型
- 6.1.2 string类型
- 6.2 数值类型
- 6.2.1 示例:获取数值类型占用的内存大小
- 6.2.2 整数常量的表示方式
- 6.2.3 科学记数法
- 6.2.4 复数
- 6.3 日期与时间
- 6.3.1 Month类型
- 6.3.2 Weekday类型
- 6.3.3 Duration类型
- 6.3.4 Time类型
- 6.3.5 Sleep函数
- 6.3.6 Timer类型
- 6.4 指针
- 6.4.1 何时使用指针类型
- 6.4.2 new函数
- 6.5 iota常量
- 第7章 函数
- 7.1 函数的定义
- 7.2 调用函数
- 7.3 return语句
- 7.4 多个返回值
- 7.5 可变个数的参数
- 7.6 匿名函数
- 7.7 将函数作为参数传递
- 第8章 流程控制
- 8.1 顺序执行
- 8.2 if语句
- 8.3 switch语句
- 8.3.1 基于表达式构建的switch语句
- 8.3.2 基于类型构建的switch语句
- 8.3.3 fallthrough语句
- 8.4 for语句
- 8.4.1 仅带条件子句的for语句
- 8.4.2 带三个子句的for语句
- 8.4.3 枚举集合元素语句
- 8.4.4 continue与break语句
- 8.5 代码跳转
- 8.5.1 代码标签与goto语句
- 8.5.2 break、continue语句与代码跳转
- 第9章 接口与结构体
- 9.1 自定义类型
- 9.2 结构体
- 9.2.1 结构体的定义
- 9.2.2 结构体的实例化
- 9.2.3 方法
- 9.3 接口
- 9.3.1 接口的定义
- 9.3.2 接口的实现
- 9.3.3 空接口——interface{}
- 9.3.4 接口与函数
- 9.4 类型嵌套
- 9.5 类型断言
- 第10章 数组与切片
- 10.1 数组
- 10.1.1 数组的初始化
- 10.1.2 访问数组元素
- 10.1.3 *[n]T与[n]*T的区别
- 10.1.4 多维数组
- 10.2 切片
- 10.2.1 创建切片实例
- 10.2.2 添加和删除元素
- 第11章 映射与链表
- 11.1 映射
- 11.1.1 映射对象的初始化
- 11.1.2 访问映射对象的元素
- 11.1.3 检查key的存在性
- 11.2 双向链表
- 11.2.1 与双向链表有关的API
- 11.2.2 创建链表实例
- 11.2.3 添加和删除元素
- 11.2.4 移动元素
- 11.2.5 枚举链表元素
- 11.3 环形链表
- 11.3.1 与环形链表有关的API
- 11.3.2 使用环形链表
- 11.3.3 滚动环形链表
- 11.3.4 链接两个环形链表
- 第12章 反射
- 12.1 关键API
- 12.2 获取类型信息
- 12.2.1 类型分辨
- 12.2.2 枚举结构体类型的方法列表
- 12.2.3 枚举结构体类型的字段列表
- 12.2.4 查找嵌套结构体的字段成员
- 12.2.5 获取函数的参数信息
- 12.2.6 获取通道类型的信息
- 12.2.7 判断类型是否实现了某个接口
- 12.3 Value与对象的值
- 12.3.1 修改对象的值
- 12.3.2 读写结构体实例的字段
- 12.3.3 更新数组/切片的元素
- 12.3.4 调用函数
- 12.3.5 调用方法
- 12.3.6 读写映射类型的元素
- 12.4 动态构建类型
- 12.4.1 New函数
- 12.4.2 创建数组类型
- 12.4.3 创建结构体类型
- 12.4.4 动态创建和调用函数
- 12.4.5 生成通用函数体
- 12.5 结构体的Tag
- 第13章 字符串处理
- 13.1 打印文本
- 13.2 格式化输出
- 13.2.1 格式化整数值
- 13.2.2 格式化浮点数值
- 13.2.3 格式化字符串
- 13.2.4 格式化布尔类型的值
- 13.2.5 %T与%v格式控制符
- 13.2.6 输出包含前缀的整数值
- 13.2.7 设置输出内容的宽度
- 13.2.8 控制浮点数的精度
- 13.2.9 参数索引
- 13.2.10 通过参数来控制文本的宽度和精度
- 13.3 读取输入文本
- 13.3.1 读取键盘输入的内容
- 13.3.2 从文件中读入文本
- 13.3.3 以特定的格式读取文本
- 13.4 实现Stringer接口
- 13.5 连接字符串
- 13.6 替换字符串
- 13.7 拆分字符串
- 13.8 查找子字符串
- 13.8.1 查找前缀与后缀
- 13.8.2 查找子字符串的位置
- 13.9 修剪字符串
- 13.9.1 去除前缀和后缀
- 13.9.2 去除字符串首尾的空格
- 13.9.3 修剪指定的字符
- 13.10 重复字符串
- 13.11 字符串与数值之间的转换
- 13.12 切换大小写
- 13.13 使用Builder构建字符串
- 第14章 常用数学函数
- 14.1 求绝对值
- 14.2 最大值与最小值
- 14.3 三角函数与反三角函数
- 14.4 幂运算
- 14.5 开平方/立方根
- 14.6 大型数值
- 14.6.1 大型整数值之间的运算
- 14.6.2 阶乘运算
- 14.6.3 使用大型浮点数值
- 14.7 随机数
- 14.7.1 生成随机浮点数
- 14.7.2 生成随机整数
- 14.7.3 设置随机数种子
- 14.7.4 生成随机全排列
- 14.7.5 “洗牌”程序
- 14.7.6 生成随机字节序列
- 第15章 排序
- 15.1 基本排序函数
- 15.2 实现递减排序
- 15.3 按字符串的长度排序
- 15.4 Interface接口
- 第16章 输入与输出
- 16.1 简单的内存缓冲区
- 16.2 与输入/输出有关的接口类型
- 16.2.1 实现读写功能
- 16.2.2 嵌套封装
- 16.3 Buffer类型
- 16.4 Copy函数
- 16.5 MultiReader函数和MultiWriter函数
- 16.6 SectionReader
- 第17章 文件与目录
- 17.1 文件操作
- 17.1.1 Create函数与Open函数
- 17.1.2 重命名文件
- 17.1.3 获取文件信息
- 17.1.4 OpenFile函数
- 17.2 创建和删除目录
- 17.3 硬链接与符号链接
- 17.3.1 硬链接
- 17.3.2 符号链接
- 17.4 WriteFile函数与ReadFile函数
- 17.5 临时文件
- 17.6 更改程序的工作目录
- 第18章 加密与解密
- 18.1 Base64的编码与解码
- 18.1.1 内置Base64编码方案
- 18.1.2 基于流的编码与解码
- 18.1.3 自定义字符映射表
- 18.2 DES与AES算法
- 18.2.1 Block接口
- 18.2.2 BlockMode模式
- 18.2.3 基于流的加密与解密
- 18.3 哈希算法
- 18.3.1 hash.Hash接口
- 18.3.2 使用crypto子包中的哈希API
- 18.3.3 HMAC算法
- 18.4 RSA算法
- 18.4.1 生成密钥
- 18.4.2 加密和解密
- 18.4.3 存储密钥
- 18.5 PEM编码
- 18.5.1 编码与解码
- 18.5.2 解码后的保留数据
- 18.5.3 消息头
- 第19章 命令行参数
- 19.1 os.Args变量
- 19.2 命令行参数分析API——flag包
- 19.2.1 命令行参数与变量的绑定
- 19.2.2 Value接口
- 第20章 数据压缩
- 20.1 标准库对压缩算法的支持
- 20.2 Gzip压缩算法
- 20.2.1 Gzip基本用法
- 20.2.2 压缩多个文件
- 20.2.3 解压多个文件
- 20.3 DEFLATE算法
- 20.4 自定义的索引字典
- 20.5 Zip文档
- 20.5.1 从Zip文档中读取文件
- 20.5.2 在内存中读写Zip文档
- 20.5.3 注册压缩算法
- 20.6 Tar文档
- 第21章 协程
- 21.1 启动Go协程
- 21.2 通道
- 21.2.1 实例化通道
- 21.2.2 数据缓冲
- 21.2.3 单向通道
- 21.2.4 通道与select语句
- 21.3 互斥锁
- 21.4 WaitGroup类型
- 第22章 网络编程
- 22.1 枚举本地计算机上的网络接口
- 22.2 Socket通信
- 22.2.1 TCP示例:文件传输
- 22.2.2 UDP示例:文本传输
- 22.3 HTTP客户端
- 22.3.1 发送GET与POST请求
- 22.3.2 发送自定义HTTP头
- 22.4 HTTP服务器
- 22.4.1 创建HTTP服务器
- 22.4.2 实现Handler接口
- 22.4.3 ServeMux类型
- 22.4.4 封装函数
- 22.4.5 读取URL参数
- 22.4.6 获取客户端提交的表单数据
- 22.4.7 读取客户端上传的文件
- 22.5 CGI编程
- 22.5.1 准备工作
- 22.5.2 示例:一个简单的CGI程序
- 22.5.3 使用cgi包
- 22.5.4 在子进程中获取Request对象
- 附录A 常用API与程序包对照表
- 附录B Go语言代码编辑工具使用说明
出版方
清华大学出版社
清华大学出版社成立于1980年6月,是由教育部主管、清华大学主办的综合出版单位。植根于“清华”这座久负盛名的高等学府,秉承清华人“自强不息,厚德载物”的人文精神,清华大学出版社在短短二十多年的时间里,迅速成长起来。清华大学出版社始终坚持弘扬科技文化产业、服务科教兴国战略的出版方向,把出版高等学校教学用书和科技图书作为主要任务,并为促进学术交流、繁荣出版事业设立了多项出版基金,逐渐形成了以出版高水平的教材和学术专著为主的鲜明特色,在教育出版领域树立了强势品牌。