Go语言之函数示例

Go语言中函数的一些示例

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package main

import "fmt"

// Go语言中函数的return不是原子操作,在底层是分为2步来进行执行的
// 第一步: 返回值赋值
// 第二步: 真正的RET分会
// 函数中如果存在defer,那么defer执行的时机是在第一步和第二步之间
func sum(x, y int) (ret int) {
return x + y
}

func f10() int {
x := 5
defer func() { // 匿名函数
x++ // 修改的是x不是返回值
}()
return x // 先返回
}

func f11() (x int) {
defer func() {
x++
}()
return 5 // 返回值=x
}

func f12() (y int) {
x := 5
defer func() {
x++
}()
return x // 返回值 = y = x = 5
}

func f13() (x int) {
defer func(x int) {
x++ // 改变的是函数中的副本
fmt.Println(x)
}(x)
return 5
}

// 没有返回值
func f2() {
fmt.Println("f2")
}

// 没有参数,但有返回值
func f3() int {
return 3
}

func f4(x int, y int) (ret int) {
ret = x + y
return // 使用命名返回值return后可以省略
}

// 返回值可以命名,也可以不命名

func f5() (int, string) {
return 10, "shuke"
}

// 参数的类型简写
func f6(x, y int) int {
return x + y
}

// 参数的类型简写,当参数中连续多个参数的类型一致时,我们可以将非最后一个参数的类型省略
func f7(x, y, z int, m, n string, i, j bool) int {
return 1
}

// 可变长参数
// 可变长参数中连续多个参数的类型一致时,我们可以将非最后一个参数的类型省略
func f8(x int, y ...int) {
fmt.Println(x)
fmt.Println(y)
}

// Go语言中支持多个返回值
func f9(x, y int) (sum int, sub int) {
sum = x + y
sub = x - y
return
}

// defer
// defer多用于函数结束之前释放资源(文件句柄/socket连接/数据库连接等)
func deferDemo() {
fmt.Println("start")
defer fmt.Println("heiheihei") // defer把它后面的语句延迟到函数即将返回的时候再执行
defer fmt.Println("hahaha") // 一个函数中可以有多个defer语句
defer fmt.Println("biubiubiu") // 多个defer语句按照先进后出/后进先出的顺序延迟执行
fmt.Println("end")
}

func main() {
r := sum(1, 2)
fmt.Println(r)
fmt.Println(f4(2, 3))

_, n := f5()
fmt.Println(n)

// 数组类型(Array)
var ages [30]int
var names [30]string
fmt.Println(ages, names)

// 在一个命名的函数中不能够在声明一个命名函数
sum, sub := f9(10, 12)
fmt.Println(sum, sub) // 22 -2

deferDemo() // defer 延迟执行
/*
start
end
heiheihei
*/
}

本文标题:Go语言之函数示例

文章作者:shuke

发布时间:2020年06月22日 - 19:06

最后更新:2020年06月22日 - 19:06

原始链接:https://shuke163.github.io/2020/06/22/Go%E8%AF%AD%E8%A8%80%E4%B9%8B%E5%87%BD%E6%95%B0%E7%A4%BA%E4%BE%8B/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Go语言之函数示例

文章作者:shuke

发布时间:2020年06月22日 - 19:06

最后更新:2020年06月22日 - 19:06

原始链接:https://shuke163.github.io/2020/06/22/Go%E8%AF%AD%E8%A8%80%E4%B9%8B%E5%87%BD%E6%95%B0%E7%A4%BA%E4%BE%8B/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%