1.定义函数
定义函数先想好输入和输出 ,一个函数最好做一件事情并把事情做好 ,通过大量简短的函数实现整体
函数签名处指定好输入的参数类型和输出返回值的类型(不写可以不返回)
函数可以有多个返回值 ,多个返回值需要括号括起来
函数可以接受任意数量的参数 ,但是类型必须一致 ,可以使用切片收集 ,在函数参数位置定义一个切片 ,在函数内部循环切片
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func Loop(sli ...string) (string, int) { 8 fmt.Println(sli) 9 for _, i := range sli { 10 fmt.Printf("is %v ", i) 11 12 } 13 return "OK", 1 14 } 15 16 func main() { 17 a, b := Loop("A", "B", "C", "D", "E") 18 fmt.Println(a, b) 19 }
2.具名函数
可提升函数的可读性 ,但是不利于维护 ,不建议使用
将签名处声明函数的返回值 ,返回裸return语句
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func Loop(sli ...string) (a,b string) { 8 fmt.Println(sli) 9 for _, i := range sli { 10 fmt.Printf("is %v ", i) 11 } 12 a,b = "C","D" 13 return 14 } 15 16 func main() { 17 a, b := Loop("A", "B", "C", "D", "E") 18 fmt.Println(a, b) 19 }
3.递归函数
通过不断的调用自身 ,直到满足特定的条件位置
实现递归就是在return终止语句的时候执行自身 (满足某些条件开始执行自己)
1 package main 2 3 import "fmt" 4 5 func recursion(x, y int) int { 6 if x+y < 100 { 7 x++ 8 y++ 9 fmt.Println("还不够") 10 return recursion(x, y) 11 } 12 return x + y 13 } 14 15 func main() { 16 fmt.Println(recursion(1, 2)) 17 }
4.函数作为值传递
go提供了函数式编程 ,可以将函数作为参数传递给其他函数 ,通过存储函数的变量加括号执行
函数要传入函数类型参数 ,需要在参数中指定函数的签名
1 package main 2 3 import "fmt" 4 5 func inter(f1 func(x int) int, f2 func(y int) int, x int, y int) int { //inter函数参数是规定了传入函数的签名 6 return f1(x) + f2(y) 7 } 8 9 func main() { 10 a := func(x int) int { 11 return x 12 } 13 b := func(y int) int { 14 return y 15 } 16 fmt.Println(inter(a, b, 3, 4)) 17 }