由于工作需要从java 转 go,不得不重新学习,网上有一些在线教程,适合快速入门但是细节太多不易抓住重点和主线,如果需要深入了解语言特性和语言使用场景,推荐大家看一看《Go in action(语言实战)》,书中第一章用一个RSS匹配器的微型程序非常巧妙的融合了Go语言的核心内容。
一、为什么用GO?
开发速度、天然并发、类型系统、内存管理。
二、包和命令
包:package
引入包:import “_" 空白标识符可以绕开import必须使用标识符限制
初始化:所有init 函数在main函数前执行
常用命令:
go build 执行编译,windows生成xxx.exe,linux 生成 xxx 文件
go run 编译并执行
go fmt 提交仓库前格式化源代码
go vet 代码异常检查
go doc 生成代码文档
三、重点数据结构
1. 数组
内存连续、需要指定长度
//声明整型数组,默认‘零’值
var array [5] int
//声明并初始化整形数组
array := [5] int {
10, 20, 30, 40, 50 }
//声明一个指针数组
array := [5] *int {
}
2. 切片 - 动态数组
类似java中 StringBuilder,可自动增长缩小,由一个包含指针、长度(len)、容量(cap)的切片结构和底层值数组构成。切片做函数传参只需要复制切片结构(8*3共24个字节)
//声明整形和字符串切片
slice := make([]int, 3, 5) // 3长度,5容量
slice := make([]string, 5, 10) // 5长度,10容量
//增长
newSlice := append(slice, 50) // 全新的底层数组,1000容量以内翻倍,超过后增增长因子为1.25
//追加
append(s1, s2...) // ...运算符,切片s2 所有值追加都 s1 中
//迭代, 注意迭代中的 value 是值副本
for index, value := range slice {
slice[index] ++
}
3. 映射
类似java中HashMap
//声明k/v映射
dict := make(map[string] string)
//声明并初始化映射
dict := map[string] string{
"Red":"1","Orange":"2"}
//申明一个使用字符串切片作为值的映射
dict := map[int] []string {
}
//查找映射
value, exists := colors["Blue"]
//迭代映射
for key, value := range colors {
}
//删除映射
delete