go语法笔记整合
switch写法以及fallthrough
- 如果没有fallthrough则执行完当前语句块之后,后面不会执行。
// 第一种写法 switch后面接变量
switch a{
case 0:
fmt.Println("0")
fallthrough
case 5:
fmt.Println(5)
default:
fmt.Println(123)
}
// 第二种写法 switch后面不接变量 但是case后面接条件表达式
switch {
case input == n:
fmt.Println("you are right")
flag = true
case input>n:
fmt.Println("more than n")
case input<n:
fmt.Println("less than n")
}
}
值传递和引用传递
- map、slice、chan、指针、interface是默认引用传递
函数&返回值
-
函数不能比较
-
返回值可以命名
func calc(a, b int) (sum int, avg int) {
sum = a + b
avg = (a +b)/2
return
}
- 返回值不用的时候可以用”_“来忽略
func calc(a, b int) (sum int, avg int) {
sum = a + b
avg = (a +b)/2
return}
func main() {
sum, _ := calc(100, 200)
}
- 可变参数
// 0个或者多个
- func add(arg…int) int {
}
// 1个或者多个
func add(a int, arg…int) int {
}
// 2个或者多个
func add(a int, b int, arg…int) int {
}
- defer语句
- 当函数返回时,执行defer语句。因此,可以用来做资源清理
- 多个defer语句,按先进后出的方式执行
- defer语句中的变量,在defer声明时就决定了。
- defer后面跟一条语句,或者一个函数。
func testDefer() {
var i int = 0
defer fmt.Println(i)
defer fmt.Println("second")
i = 10
fmt.Println(i)
}
输出:
10
second
0
- 格式化打印数据类型:%T