1. 1. 编译器和运行时
    1. 1.1. 编译错误 non-name *** on left side of := 什么意思
    2. 1.2. 编译错误 unexpected newline, expecting { … 什么意思
    3. 1.3. 编译错误 declared and not used 什么意思
    4. 1.4. Go 运行时是否会维持 map 的遍历顺序
    5. 1.5. Go 编译器是否会对结构体类型做填充以保证字段对齐
    6. 1.6. 为什么一个结构体中结尾的零大小类型的字段有时会影响结构体的大小
    7. 1.7. new(T) 是 var t T; (&t) 的语法糖吗
    8. 1.8. 运行时错误 all goroutines are asleep - deadlock 什么意思
    9. 1.9. 被确保 64 位对齐的变量和结构体字段能原子访问吗
    10. 1.10. 赋值是原子操作吗
    11. 1.11. 零值在内存中是由零字节序列组成的吗
    12. 1.12. 标准 Go 编译器支持函数内联吗
  2. 2. 标准库
    1. 2.1. 如何原子操作指针值
    2. 2.2. 怎么用更少的代码获得任何月的天数
    3. 2.3. time.Sleep(d) 函数调用和 <- time.After(d) channel 接收操作有何不同
    4. 2.4. 我能用 finalizers 作为对象解构器吗
    5. 2.5. 调用 strings 和 bytes 标准库中的 TrimLeft 和 TrimRight 经常返回不期望的结果, 是实现的 BUG 吗
    6. 2.6. fmt.Print, fmt.Println 和 fmt.Printf 是否是同步的
    7. 2.7. fmt.Print 和 fmt.Println 有何不同
    8. 2.8. log.Print 和 log.Println 有没有不同
    9. 2.9. 内建的 print/println 和对应的 fmt 和 log 标准库的 print 函数有何不同
    10. 2.10. 通过 math/rand 和 crypto/rand 标准库产生随机数有什么不同
    11. 2.11. 为什么没有 math.Round 函数
  3. 3. 类型系统
    1. 3.1. 什么类型不支持比较
    2. 3.2. 为什么两个 nil 值有时不相等
    3. 3.3. 为什么尽管两个不同类型 T1 和 T2 共享相同的底层类型, []T1 和 []T2 依然不共享相同的底层类型
    4. 3.4. 哪些值可以哪些值不可以寻址
    5. 3.5. 为什么 map 元素不可寻址
    6. 3.6. 为什么非 nil slice 总是可寻址的, 即便 slice 本身不可寻址
    7. 3.7. 对于非指针非接口定义的类型 T, 为什么 *T 的方法集总是 T 方法集的超集, 反之则不然
    8. 3.8. 我们可以为哪些类型实现方法
    9. 3.9. Go 中如何定义不可变值
    10. 3.10. 为什么没有内建 set 类型
    11. 3.11. 什么是 byte, 什么是 rune, 怎样把 []byte 和 []rune 转为字符串
  4. 4. 其他
    1. 4.1. iota 什么意思
    2. 4.2. 为什么没有一个 closed 函数用来检查一个 channel 是否已经关闭
    3. 4.3. 一个函数返回本地变量的指针安全吗
    4. 4.4. 单词 gopher 在 Go 社区有什么意义

Go 问答 101