go 2.04 函数
创建时间:2019-05-17 17:48
阅读:
函数定义说明: 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" 转载请保留原文链接及作者。