- string
- if
- switch
- const
- testing
integers
,adder
- for
- arrays
- slices
- init slices
- append
- structs
- methods
- interfaces
- Pointers 指针
- 当你传值给函数或方法时,Go 会复制这些值。因此,如果你写的函数需要更改状态,你就需要用指针指向你想要更改的值
- Go 取值的副本在大多数时候是有效的,但是有时候你不希望你的系统只使用副本,在这种情况下你需要传递一个引用。例如,非常庞大的数据或者你只想有一个实例
- nil
- 指针可以是 nil
- 当函数返回一个的指针,你需要确保检查过它是否为 nil,否则你可能会抛出一个执行异常,编译器在这里不能帮到你
- nil 非常适合描述一个可能丢失的值
- 错误
- 错误是在调用函数或方法时表示失败的
- 通过测试我们得出结论,在错误中检查字符串会导致测试不稳定。因此,我们用一个有意义的值重构了,这样就更容易测试代码,同时对于我们 API 的用户来说也更简单
- 初始化map,并且使用
增删改查
操作map
- 依赖注入
- mocking
- goroutines 是 Go 的基本并发单元,它让我们可以同时检查多个网站
- anonymous functions(匿名函数),我们用它来启动每个检查网站的并发进程
- channels,用来组织和控制不同进程之间的交流,使我们能够避免 race condition(竞争条件) 的问题。
- the race detector(竞争探测器) 帮助我们调试并发代码的问题
- select
- 可帮助你同时在多个 channel 上等待。
- 有时你想在你的某个「案例」中使用 time.After 来防止你的系统被永久阻塞。
- httptest
- 一种方便地创建测试服务器的方法,这样你就可以进行可靠且可控的测试
- 使用和 net/http 相同的接口作为「真实的」服务器会和真实环境保持一致,并且只需更少的学习
- reflect的使用
- 使用递归遍历任意数据结构
- Mutex
- 允许我们在数据中添加锁
- WaitGroup
- 等待goroutines完成工作的一种方式
- 接受 context,并使用它来取消自己使用的 goroutines, select 和 通道