>[success] # 序章
- 本笔记会带领大家入门 Go 语言, 您将学到如下内容:
- Go 语言的环境搭建
- 第一个应用程序 Hello World
- 语法 1 : 变量,常量,条件语句
- 语法 2 : 数组,切片,集合,协程,通道
- 语法 3 : 函数,结构体,方法,接口
- 语法 4 : 延迟,异常,恢复,指针,反射
- 项目实战和后续学习
- 面试知识点
- 以上每一小节会给出可运行例子的代码, 方便大家学习和理解。在讲解基础的过程中顺便说下我这几年用 Go 的心得和遇到的坑, 其中切片,集合,协程, 管道会偏重点介绍。
- 学完语法之后,大家可能还是懵懵懂懂的,好像学会了, 又好像又无从下手。这里的项目实战和后续学习会提供两个练手项目的源代码, 一个是用 Gin 框架写的留言板, 另一个是用原生 gRPC 写的微服务案例。
>[info] # 学前准备
- 在进入学习前,先阅读下面文章了解 Golang 历史起源、使用、设计、以及可能遇到的问题
- [Golang 常见问题和答案(英文版)](http://docscn.studygolang.com/doc/faq#Origins)
- [Golang 常见问题和答案(翻译版)](https://blog.csdn.net/u013235478/article/details/86083896)
>[info] # 版本发布历史
- [Golang 版本发布历史(英文)](https://docs.studygolang.com/doc/devel/release.html)
- [Golang 各版本特性回顾](https://cloud.tencent.com/developer/article/1628741)
>[info] # 相关阅读
- [Go语言规范](https://golang.google.cn/ref/spec#Types)
- [Go 语言现状](https://www.oschina.net/news/130342/the-state-of-go-2020)
- 序章
- 第一章 准备工作
- 搭建环境
- 第一个应用程序 Hello World
- 语法结构
- 第二章 变量,常量
- 2.1 命令规则
- 2.2 变量
- 2.3 常量
- 2.4 常量计数器 iota
- 2.5 零值为 nil 的有哪些
- 2.6 类型推断的好处
- 2.7 类型别名
- 2.8 Unicode字符编码
- 2.9 int 是32位还是64位
- 2.10 byte and rune
- 第三章 条件语句
- 3.1 判断语句 if
- 3.2 选择语句 switch
- 3.3 循环语句 for
- 3.4 遍历 range
- 3.5 跳转语句 goto, break, continue
- 3.6 for 和 for range 区别
- 3.7 for 和 for range 犯过的错
- 第四章 数组,切片,集合,协程,通道
- 4.1 数组 array
- 4.2 切片 slice
- 4.2.0 切片知识点
- 4.2.1 切片的底层
- 4.2.2 切片扩容
- 4.2.3 切片的使用1
- 4.2.4 切片的使用2
- 4.2.5 切片的使用3
- 4.2.6 切片的使用4
- 4.2.7 切片的copy, append
- 4.2.8 切片数据按某个字段分组
- 4.2.9 字符串和切片的底层
- 4.2.10 我是否可以将 [] T1 转换为 [] T2 如果 T1 和 T2 有相同的基础类型?
- 4.2.11 切片的排序
- 4.2.12 将切片类型声明为指针类型的场景
- 4.2.13 为什么 Go 不支持 []T 转换为 []interface
- 4.3 集合 map
- 4.3.0 map 知识点
- 4.3.1 map的底层
- 4.3.2 map等量扩容
- 4.3.3 map的使用
- 4.3.4 map无序输出和有序输出
- 4.3.5 并发错误 fatal error: concurrent map writes
- 4.3.6 并发安全字典
- 4.4 协程 goroutine
- 4.4.0 进程、线程、协程知识点
- 4.4.1 goroutine的底层
- 4.4.2 并发和并行
- 4.4.3 goroutine的使用
- 4.5 通道 channel
- 4.5.1 channel相关概念
- 4.5.2 select处理channel
- 4.5.3 for range处理channel
- 4.6 make 和 new 的区别
- 4.7 cap 和 len
- 第五章 函数,结构,方法,接口
- 5.1 函数 function
- 5.1.1 简单使用
- 5.1.2 匿名函数
- 5.1.3 闭包函数
- 5.1.4 递归
- 5.1.5 尾递归
- 5.1.6 迭代
- 5.1.7 回调函数
- 5.2 结构体 struct
- 5.2.1 简单使用
- 5.2.2 Json 序列化和反序列化
- 5.2.3 序列化时过滤字段
- 5.2.4 两个内部结构一样名称不同的结构体能否比较
- 5.3 方法 method
- 5.3.1 简单使用
- 5.4 接口 interface
- 5.4.1 简单使用
- 5.5 T 和 *T
- 第六章 延迟,异常,恢复,指针,反射
- 6.1 延迟 defer
- 6.1.1 例子1
- 6.1.2 例子2
- 6.2 异常 panic 和 恢复 recover
- 6.3 defer 和 panic
- 6.4 指针
- 6.4.1 指针1
- 6.4.2 指针2
- 6.4.3 传值 or 传指针 ?
- 6.4.4 使用指针和不使用指针的场景
- 6.5 指针(补充: 可寻址和不可寻址)
- 6.6 反射
- 第七章 练手项目和后续学习
- 7.1 留言板1
- 7.2 留言板2
- 7.3 后续学习
- 7.4 学习资料
- 技术扩展阅读