
入门教程:go指南
go的优点(为什么用go做分布式)
- 对线程的良好支持
- 线程之间的锁和同步
- 有一个方便的RPC包
- 类型安全以及内存安全
- 垃圾回收型语言
go的代码特点
大写字母开头为公有,小写字母开头为私有。
go的声明类型在变量之后的原因:易于阅读,当函数名太复杂的情况下不易混淆。
go的闭包

go的锁
go的锁与任何变量都没有关系,只与锁的变量本身有关,表示接下来的代码是互斥的,线程要执行就要先争夺锁变量。
defer
在Go语言中,可以使用关键字defer向函数注册退出调用,即主函数退出时,defer后的函数才被调用。defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码。defer是在return调用之后才执行的。
- 当defer被声明时,其参数就会被实时解析(参数是函数就执行参数函数)
func a() {
i := 0
defer fmt.Println(i) //输出0,因为i此时就是0
i++
defer fmt.Println(i) //输出1,因为i此时就是1
return
}
- defer执行顺序为先进后出(上图输出10)
- defer可以读取有名的返回值例子
go race数据竞争检测
race detector:在编译流程中内置到你程序的代码。一旦你的程序开始运行,它能够发现和报告任何他所检测到的竞态情况。(解决:使用互斥锁)


