go 2.04 函数

函数定义说明:
1)函数由关键字func开始声明
2)函数首字母小写即为private, 首字母大写即为public
3)不支持默认参数

普通函数

1
2
3
4
5
6
7
8
9
10
11
func MyFunc01(a, b int) {
// 等价于func MyFunc01(a int, b int) {
fmt.Println(a)
fmt.Println(b)
}

func main() {
a := 1
b := 2
MyFunc01(a, b)
}

不定参数函数

函数的传递参数的个数不定,类型确定为同一种类型

1
2
3
4
5
6
7
8
9
10
11
12
13
// 传递的参数可能是0个或多个
func MyFunc01(args ...int) {
for _, data := range args {
fmt.Println(data)
}
}

func main() {

a := 1
b := 2
MyFunc01(a, b)
}

固定参数与不定参数函数同时写时,形参只能放最后

1
2
3
4
5
6
7
8
9
10
11
12
13
func MyFunc01(a int, args ...int) {
fmt.Println("a = ", a)
for _, data := range args {
fmt.Println("args element value:", data)
}
}

func main() {

a := 1
b := 2
MyFunc01(a, b)
}

有返回值函数,给返回值起变量名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
)

func MyFunc01(a, b int) (result_1, result_2 int) { // 给返回值起变量名
result_1, result_2 = a, b
return
}

func main() {
a := 1
b := 2
c, d := MyFunc01(a, b)
fmt.Println(c)
fmt.Println(d)
}

有返回值函数,未给返回值起变量名

1
2
3
4
5
6
7
8
9
10
11
12

func MyFunc01(a, b int) (int, int) { // 不给返回值起变量名,只有返回类型
return a,b
}

func main() {
a := 1
b := 2
c, d := MyFunc01(a, b)
fmt.Println(c)
fmt.Println(d)
}

递归函数调用流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
)

func MyFunc01(a int) {
if a == 1 {
fmt.Println("a =", a)
return //终止函数调用
}
MyFunc01(a - 1)
fmt.Println("a =", a)
}

func main() {
a := 3
MyFunc01(a)
}

执行结果:
a = 1
a = 2
a = 3

使用type定义函数为一种类型

函数也是一种数据类型,通过type给一个函数类型起名

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
package main

import (
"fmt"
)

func Add(a, b int) int {
return a + b
}

func Minus(a, b int) int {
return a - b
}

type FuncType func(int, int) int // 使用type关键字定义一种函数类型,命名为Functype

func Calc(a, b int, calc FuncType) int {
return calc(a, b)
}

func main() {
a := 1
b := 2
result := Calc(a, b, Add)
fmt.Printf("calc result is: %v\n", result)

result = Calc(a, b, Minus)
fmt.Printf("calc result is: %v\n", result)
}

匿名函数

1
2
3
4
5
6
7
8
9
10
11
func main() {
a := 3
str := "abc"
func() { //匿名函数:没有函数名称及函数声明
fmt.Println("a = ", a)
fmt.Println("str = ", str)
str = "mike" // 由于闭包引用方式捕获外部变量 ,所以这里会改变函数之外的变量
}() // 使用()调用匿名函数

fmt.Println(str)
}

带参数,带返回值的匿名函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func main() {
a := 3
str := "abc"
c, d := func(a int, b string) (c int, d string) { //带参数和返回值
fmt.Println("a = ", a)
fmt.Println("str = ", b)
a = 10
c = a
d = "mike"
return
}(a, str) //调用匿名函数,传入参数

fmt.Println(a)
fmt.Println(str)
fmt.Println(c)
fmt.Println(d)
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com

文章标题:go 2.04 函数

本文作者:Shawn

发布时间:2019-05-17, 17:48:26

最后更新:2019-05-21, 14:43:14

原始链接:https://gitrootid.github.io/2019/05/17/golang/go-2-04-函数_/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏