前言
Go语言起源
Go语言项目
本书的组织
更多的信息
致谢
入门
Hello, World
命令行参数
查找重复的行
GIF动画
获取URL
并发获取多个URL
Web服务
本章要点
程序结构
命名
声明
变量
赋值
类型
包和文件
作用域
基础数据类型
整型
浮点数
复数
布尔型
字符串
常量
复合数据类型
数组
Slice
Map
结构体
JSON
文本和HTML模板
函数
函数声明
递归
多返回值
错误
函数值
匿名函数
可变参数
Deferred函数
Panic异常
Recover捕获异常
方法
方法声明
基于指针对象的方法
通过嵌入结构体来扩展类型
方法值和方法表达式
示例: Bit数组
封装
接口
接口是合约
接口类型
实现接口的条件
flag.Value接口
接口值
sort.Interface接口
http.Handler接口
error接口
示例: 表达式求值
类型断言
基于类型断言识别错误类型
通过类型断言查询接口
类型分支
示例: 基于标记的XML解码
补充几点
Goroutines和Channels
Goroutines
示例: 并发的Clock服务
示例: 并发的Echo服务
Channels
并发的循环
示例: 并发的Web爬虫
基于select的多路复用
示例: 并发的目录遍历
并发的退出
示例: 聊天服务
基于共享变量的并发
竞争条件
sync.Mutex互斥锁
sync.RWMutex读写锁
内存同步
sync.Once惰性初始化
竞争条件检测
示例: 并发的非阻塞缓存
Goroutines和线程
包和工具
包简介
导入路径
包声明
导入声明
包的匿名导入
包和命名
工具
测试
go test
测试函数
测试覆盖率
基准测试
剖析
示例函数
反射
为何需要反射?
reflect.Type和reflect.Value
Display递归打印
示例: 编码S表达式
通过reflect.Value修改值
示例: 解码S表达式
获取结构体字段标签
显示一个类型的方法集
几点忠告
底层编程
unsafe.Sizeof, Alignof 和 Offsetof
unsafe.Pointer
示例: 深度相等判断
通过cgo调用C代码
几点忠告
附录
附录A:原文勘误
附录B:作者译者
附录C:译文授权
附录D:其它语言
本书使用 GitBook 发布
附录C:译文授权
附录C:译文授权
除特别注明外, 本站内容均采用
知识共享-署名(CC-BY) 3.0协议
授权, 代码遵循
Go项目的BSD协议
授权.