-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunction
97 lines (77 loc) · 1.78 KB
/
function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
函数function
go函数不支持嵌套、重载和默认参数
但是支持以下特性
无需声明原型,不定长度变参,多返回值,命名返回值参数
匿名函数、闭包
定义函数使用关键字 func 且左大哭哦汗不能另起一行
函数也可以作为一种类型使用
1.函数类型使用
func A() {
//func A (int,int,int ) {} 或者func A (a,b,c int) 命名返回值参数
//func A (a ... int) {} 不定长参数 a....后面元素都是Int形
//func A (b string, a ... int) 可以这样不定长变参不能 先...再 定义其他函数
fmt.Println("FUNC A")
}
func main() {
a :=A
a()
}
2.匿名函数
func main() {
a :=func() { //a:= 一个匿名函数
fmt.Println("FUNC A")
}
a()
}
3.闭包
func main() {
f := closure(10) //把f=10引入闭包 =x
fmt.Println(f(1)) //把f(1)引入 =y
fmt.Println(f(2)) //把f(2)引入 =y
}
func closure(x int) func(int) int {
return func(y int) int {
return x+y
}
}
------------闭包过程------------
func main() {
f := closure(10)
fmt.Println(f(1))
fmt.Println(f(2))
}
func closure(x int) func(int) int {
fmt.Println(x) //验证X值
fmt.Printf("%p\n", &x)
return func(y int) int {
fmt.Printf("%p\n", &x)
return x + y
}
}
4.defer操作
func main() {
fmt.Println("a")
defer fmt.Println("b")
defer fmt.Println("c") //defer 逆序先调用 结果为A C B
}
5.golang异常panic和恢复recover用法
func main() {
A()
B()
C()
}
func A() {
fmt.Println("Func A")
}
func B() {
defer func () { //defer恢复panic
if err :=recover();
err !=nil {
fmt.Println("Recover in B")
}
}()
panic("Func B")
}
func C() {
fmt.Println("Func C")
}