Go语言基础入门(上) | 青训营笔记
[第六届青训营] 笔记创作的第一篇
本堂课的内容
分为3个部分:
- 第一个部分介绍了Go语言基本特点
- 第二个部分介绍了Go语言的基本语法
- 第三个部分是使用了3个demo示例带着大家熟悉Go语言
接下来就大致按照这些点介绍一下Go语言基础
Go语言基本特点
-
语法简洁,易于上手:不像C/C++动辄需要2—3年的学习期,Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有 for 一种表示方法,就可以实现数值、键值等各种遍历。
-
代码风格统一:Go 语言提供了 go fmt 这样一套格式化工具。一些 Go 语言的开发环境或者编辑器在保存时,都会使用格式化工具进行修改代码的格式化,这样就保证了不同开发者提交的代码都是统一的格式。
-
高性能高并发:Go语言具有轻量级的线程(Goroutine)和高效的信道(Channel)等特点,可以很好地支持高并发计算。
-
跨平台
-
自动gc
Go语言基本语法
Go语言基本数据类型
- 整数
- 浮点数
- 布尔类型
- 跨平台
- 自动gc
变量
在Go语言中,变量是强类型而非弱类型的,故在声明变量的时候必须指明变量的类型,并且在函数调用等情况下, 编译器会检查其类型的正确性。
Go语言变量声明时,使用var声明语句,且变量类型一般放在变量名后面。当然var也可以一次声明多个对象,并且Go会自动推断已经有初始值的变量的类型。:= 语法是声明并初始化变量的简写, 例如 var f string = "short" 可以简写为右边这样。
var b, c int = 1, 2
f := "short"
流程控制
for 是 Go 中唯一的循环结构,有最基础的单个循环条件方式,也有经典的初始/条件/后续 for 循环。不带条件的 for 循环将一直重复执行, 直到在循环体内使用了 break 或者 return 跳出循环。
也可以使用 continue 直接进入下一次循环。
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
for j := 7; j <= 9; j++ {
fmt.Println(j)
}
for {
fmt.Println("loop")
break
}
for n := 0; n <= 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
数组
在 Go 中,数组 是一个具有编号且长度固定的元素序列。可以使用 array[index] = value 语法来设置数组指定位置的值, 或者用 array[index] 得到值。内置函数 len 可以返回数组的长度。
也可以使用 continue 直接进入下一次循环。
var a [5]int
a[4] = 100
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
切片
Slice 是 Go 中一个重要的数据类型,它提供了比数组更强大的序列交互方式。要创建一个长度不为 0 的空 slice,需要使用内建函数 make。
特点:
- 切片长度是可变的,超出容量后会自动扩容,类似于Java中ArrayList
- 切片支持切片操作,比如切片名[1:3]会获取切片中下标1-2的元素(左闭右开)
- 通过copy函数,可以实现切片快速拷贝
s := make([]string, 3)
var a = make([]int, 3)
a[0] = 0
a[1] = 1
a[2] = 2
// 切片
fmt.Print(a[:2]) // 0 1
// 拷贝
var b = make([]int, len(a))
copy(b,a)
// 追加
a = append(a, 3, 4, 5)
Map
map 是 Go 内建的关联数据类型 (在一些其他的语言中也被称为 哈希(hash) 或者 字典(dict))。与slice一样,如要创建一个空 map,需要使用内建函数 make:make(map[key-type]val-type)。
使用典型的 name[key] = val 语法来设置键值对。内建函数 len 可以返回一个 map 的键值对数量,内建函数 delete 可以从一个 map 中移除键值对。
当从一个 map 中取值时,还可以选择是否接收的第二个返回值,第一个值就是键值对键所对应的value,第二个值表明了 map 中是否存在这个键。如这里我们不需要值,所以用 空白标识符(blank identifier) _ 将其忽略。
m := make(map[string]int)
m["k1"] = 7
m["k2"] = 13
v1 := m["k1"]
delete(m, "k2")
_, prs := m["k2"]