go基础学习笔记
思维导图
变量
声明形式为var 变量名 变量类型
赋值形式为变量名=变量值
声明和赋值同时形式为变量名:=变量值
多个变量同时声明使用形式为
var (x intb bool
)
当有多个变量类型一样时,可以放在一行,形式为var x,y int
,当类型一样,并且需要赋值同一行形式为a, b :=10, 20
特殊变量名_(下划线),当赋值给下划线时,会被丢弃_, b:=10,20
类型
int在32位硬件上是32位的,在64位硬件上是64位的
数字类型的有
- int8, int16,int32,int64, rune(int32的别名)
- byte, uint8, uint16, uint32, uint64
- float32, float64
字符串在go中是不可修改的,如果需要修改,需要如下操作
var s string = "hello"
c := []rune(s)
c[0] = 'c'
s2 := string(c)
多行字符串支持形式有
- 使用+换行,这个不包含换行符
- 使用反引用``,包含换行符
s := "Starting part" +"Ending part"
s1 := `Starting partEnding part`
复数类型有complex126, complex64
错误类型为error
常量
其支持的类型有数字、布尔和字符串。多个常量同时声明使用形式与变量类似。在使用枚举时,可以使用iota,首次使用表示0,再次使用则+1,如
const (a = iotab
)
运算符
算术运算符有:*,/, %,<<, >>
位运算符有:&,&^, |, ^
关系运算符有:==, !=, <,<=, >, >=
逻辑运算符有:&&, ||, !
通道运算符:<-
控制结构
支持条件和循环
条件形式为if或者switch
if 条件 {} else {}
或者
switch {
case 条件
}
在switch不带表达式时,即为true,执行内部的case条件语句
在带有表达式时,会判断条件的真假,进入对应的case分支,匹配失败时不会向c语言样自动向下尝试,如果想要像c语言那样,则添加fallthrough
循环形式有
for init; condition; post {}
或者
for condition {}
或者
for {}
range可以用于循环,尤其是在数据类型为slice, array, string, map和channel
list := []string{"a", "b", "c", "d", "e", "f"}
for k, v := range list {fmt.Println(k, v)
}
array,slice和map
数组声明形式为var a [n]type
,其中n表示数组元素个数,type表示数组元素类型。在联合声明时a:=[...]int{}
,n可以使用省略号,由go自动计算数组元素个数。数组是值类型
slice是引用类型,为指向array的指针
函数
形式为
func (p myType) funcname(q int)(r, s int) {
}
当没有返回值时,(r,s int)可以省略
当返回值只有一个时,可以只写类型
defer语句在函数退出时执行,比如资源回收
变参函数形式为
func funcname(arg ...int)
在函数体内,变参类型为slice,对于没有指定类型的变参,类型默认为interface
包
包中大写字母开头的是public的,小写字母开头的是private的
推荐使用go module来管理包
测试包
测试包为testing。在使用go test时,会遍历以_test.go结尾的go文件,同时执行以Test开头的测试函数