1. 函数简介
- 概念:每一个程序都包含很多函数,函数是基本的代码块
- Golang中拥有三种类型的函数
- 普通的带名字的函数
- 匿名函数或这lambda函数
- 方法
2. 函数的一般的定义格式
func func_name(args, args...) type {
// statement
}
type
3. 按值传递和按引用传递
- 按值传递:Golang默认是按值传递,也就是传递参数的副本,函数在接收到参数的副本之后可能会对副本的值进行修改,但是不会影响原来的变量
- 按引用传递:如果你希望一个函数可以直接修改参数的值,而不是对其副本进行操作,你就需要在参数的前面加上&符号的形式传递给函数,这就是应用传递,此时传递给函数的参数就是一个指针。
4. 对函数的返回值进行命名
- Golang中允许你对函数的返回值类型进行命名
func getName(name string) n string {
return name
}
5. 传递变长参数
...type
func long_args(args, kwargs, ...int) {
// statement
}
6. defer关键字
defer
7. 一些内置函数
- close:用于管道
- len, cap:len用于返回某个类型的长度或数量;cap返回某个类型的最大容量(只能用于切片和map)
- new和make:均是用于内存分配;new用户用户自定义类型和值类型,例如结构;make用于用户内置引用类型(切片,map,管道)
- copy和append:用于复制和连接切片
- panic和recover:均用于错误处理
8. 递归函数
- 概念:当一个函数在函数体内调用自身,则称之为递归
package main
import "fmt"
func main() {
result := 0
for i := 0; i <= 10; i++ {
result = fibonacci(i)
fmt.Println(result)
}
}
func fibonacci(n int) (res int) {
if n >= 1 {
res = 1
} else {
res = fibonacci(n-1) + fibonacci(n-2)
}
return
}
9. 函数一等公民
- 函数可以作为其他函数的参数进行传递,然后在其他函数内调用执行,一般称为回调。
package main
import "fmt"
func main() {
callback(2, Add)
}
func Add(x, y int) {
fmt.Println(x+y)
}
func callback(z int, f func(int, int)) {
f(z, 5)
}
10. 闭包
func () {
sum := 0
for i := 0; i <= 10; i++ {
sum+=1
}
fmt.Println(sum)
}()
that's all