- 在函数外面定义变量时 要用
var
不能用:=
- byte
8位
rune32位
(字符类型) complex64
(复数,实部32位,虚部32位)- go中没有隐式类型转换 类型转换都是强制的
float
类型四舍五入为int
: int((a*10+5)/10)
-
const a = 3
var b float64 = 2
c := a+b
var a = 3
var b float64 = 2
c := a+b
- go的switch是自动break的,可以用
fallthrough
取消break - 换行需打逗号
fmt.Println(a,b)
fmt.Println(a,
b)
fmt.Println(a,
b,
)
fmt.Println(a,
b
)
- go中的指针不能进行运算(与c++不同)
- go中参数的传递只有值传递一种方式
- 交换两个变量:
a,b = b,a
- iota 在const 中使用,从0开始递增
const(
B = 1 <<(10*iota)
KB
MB
)
-
var arr [5]int
arr := [5]int{1,2,3,4,5}
arr := [...]{1,2,3,4,5}
- 数组是值类型
- 切片是数组的一个视图(引用类型)
- 切片可以向后扩展,不可以向前扩展


注:切片时可以向后扩展,不能超过cap,取值时不能扩展,不能超过len append
时,若超越cap,系统会重新分配更大的底层数组map
的key是无序的- 若从
map
取值时,key不存在,会返回默认值,不会报错 - 为结构定义的方法,必须放在同一个包内(可以是不同的文件)
- 指针接收者实现只能以指针方式使用,值接收者都可
- defer执行顺序类似栈,先进后出
- 参数在defer语句时计算
func T(){
i := 0
defer fmt.Println(i)
i = 1000
return
}
- defer 和return
func F1(){
x := 5
defer fun(){
x += 1
}()
return x
}
func F2()(x int){
defer func(){
x += 1
}()
return 5
}
panic
过程:停止当前函数执行,一直向上返回,执行每层的defer(defer在panic之前定义)如果没有遇见recover
,程序退出recover
:仅在defer调用中使用,获取panic的值,如果无法处理,可以重新panic