这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
基础语法
1. 变量
1.1 常见变量类型
整数型
浮点型:主要是为了表示小数,也可细分为float32和float64两种。
字符串:字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用UTF-8编码标识Unicode文本。
布尔型:布尔型的值只可以是常量 true 或者 false。
2.循环
for i := 1; i <= 10; i++ {
fmt.Println("hello world",i)
}
for i := 0; i < 5; i++ {
if i%2 == 0 {
continue
}
fmt.Println("i=", i) //i = 1, i = 3
}
for {
fmt.Println("hello world") //hello world
break
}
break是跳过整个代码块,继续执行后面的后面的代码。continue是结束for循环中的当次循环,继续执行下一次的循环。continue只能被用于for循环中。
3. switch
num := 3
switch num {
case 1:
fmt.Println("ok1")
case 2:
fmt.Println("ok2")
case 3:
fmt.Println("ok3")
fallthrough //穿透
case 4:
fmt.Println("ok4")
default:
fmt.Println("匹配失败")
}
(1)case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致. case 后面不需要带break , 程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行 default。 (2) default 语句不是必须的。 (3)switch 穿透fallthrough ,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也叫 switch 穿透
4.数组
-
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类 型可以是任意的原始类型例如整型、字符串或者自定义类型。数组长度必须是一个常量表达式,并且必 须是一个非负整数。
-
注意事项:如果我们想让数组元素类型为任意类型的话可以使用空接口作为类型。当使用值时我们必须 先做一个类型判断。
-
如果每个元素是一个整型值,当声明数组时所有的元素都会被自动初始化为默认值 0。
-
遍历数组的方法既可以for 条件循环,也可以使用 for-range。这两种 for 结构对于切片 (slices)来说也同样适用。
-
使用new() 创建的数组是指针
6. 几种赋值方式
5. 切片
切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切 片是一个引用类型(和数组不一样)。这个片段可以是整个数组,或者是由起始和终止索引标识的一些 项的子集。需要注意的是,终止索引标识的项不包括在切片内。
切三种切片初始化方式:
切片提供了计算容量的函数 cap() 可以测量切片最长可以达到多少:它等于切片的长度 + 数组除切 片之外的长度。如果 s 是一个切片,cap(s) 就是从 s[0] 到数组末尾的数组长度。切片的长度永 远不会超过它的容量,所以对于 切片 s 来说该不等式永远成立:0 <= len(s) <= cap(s)。
6. map
- map 是引用类型,可以使用如下声明:
2.key 可以是任意可以用 == 或者 != 操作符比较的类型,比如 string、int、float。所以数组、 切片和结构体不能作为 key,但是指针和接口类型可以。如果要用结构体作为 key 可以提供 Key() 和 Hash() 方法,这样可以通过结构体的域计算出唯一的数字或者字符串的 key。 value 可以是任意类型的;通过使用空接口类型,我们可以存储任意值,但是使用这种类型作为值时 需要先做一次类型断言。map 也可以用函数作为自己的值,这样就可以用来做分支结构:key 用来选 择要执行的函数。
3.当 map 增长到容量上限的时候,如果再增加新的 key-value 对,map 的大小会自动加 1。所以出 于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。 map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序。 如果你想为 map 排序,需要将 key(或者 value)拷贝到一个切片,再对切片排序(使用 sort 包)。
本人小白一枚,以上如有错误或者建议请指正。