- [Go 语言学习资料索引](https://github.com/Unknwon/go-study-index) - [gopherchina](https://gopherchina.org/): [Gopher China 2015](http://www.imooc.com/learn/407) - [golang中国](https://golangtc.com/): 社区 + 中国镜像 - [go dep](https://github.com/golang/dep) - [go微服务实战](https://gocn.vip/question/1999) - [搭建并行处理管道, 感受go语言魅力](https://www.imooc.com/learn/927) - [go代码重构](https://www.cnblogs.com/sunsky303/p/9296188.html) - [go语言最佳实践](https://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653371497&idx=1&sn=1dfc90bb65d61d710d7d1cf6783d4464) go的CSP通信方式, 在1985年时的论文就已经有了. 做理论研究的人, 如果没有几年十几年甚至几十年的大胆假设, 可能很难提高了 共享内存的方式来通信 -> 通信的方式来共享内存 不要被表象迷惑 语言特性: 内置数据结构 内存管理 闭包 反射 goroutine channel 远程RPC defer 多返回值 类型系统 面向过程 面向对象 代码风格: gofmt 驼峰式 函数名大小写 -> 可见性(大写可见) 包: 申明package 导入import 初始化init() 字面量: 基础数据类型 复合数据类型struct 嵌套 go语言使用组合 包管理: [go dep](https://github.com/golang/dep) -> go module 文档: godoc package/func/BUG go 标准命令和工具 : 官方依赖管理工具, 坐等合并到官方 tool chain 流程控制: switch for for-range defer panic-recover ``` # 环境变量 GOROOT PATH # $GOROOT/bin GOPATH # 工作区 go get src/ # 注意 package: 命令源码文件(go run / go build / go install) vs 库源码文件 pkg/ # go install 编译归档文件 bin/ # go install 可执行文件 ``` ``` # 标准命令 ``` ``` # 语法 - # 空标识符 => 垃圾桶 # 基本类型 byte # uint8 string # 字节序列, 不可变 -> 原生(反引号) 解释型(双引号) rune # int32 Unicode字符 -> 字符('a') 进制(\x 16进制 \ 8进制) Unicode编码规范(\u 2字节 \U 4字节) 转义符(\a) complex64 # float32 + float32 complex128 # float64 + float64 ``` ```go // 类型转换 -> 关于自由 var n uint32 = 3 for i := 0; i < int(n); i++ { // i:=0 -> i 是 int fmt.Println(i) } i := 10 strconv.Itoa(i) ``` ## 遇到的问题 - 接口的实现不是强制性的, 怎么让 ide 快速 - 时刻需要处理的 err 交叉编译->跨平台 测试: test benchmark; go test 反射 cgo 字符串 nowdoc 格式 类型断言(instance): `value, ok := em.(T)` go tool tour fatal error: all goroutines are asleep - deadlock! import go run go build go install go get int float byte rune string nil array slice(make) map channel sender receiver func struct interface 指针 if switch for select defer error panic recover go ```go s := make([]string, 3) m := make(map[string]int) ``` ## go tool ``` go env # GOPATH -> src pkg bin go tool tour go build go run go test gofmt godoc ```