1,定义:代码复用和测试的基本单元。
2,关键字func用于定义函数。
3,函数优点
- 无需前置声明
- 不支持命名嵌套定义
- 不支持同名函数重载
- 不支持默认参数
- 支持不定长变参
- 支持多返回值
- 支持命名返回值
- 支持匿名函数和闭包
4,函数属于第一类对象,具有相同签名(参数及返回值列表)的视作同一类型,第一类对象定义:指可在运行期间创建,可用作函数参数或返回值,可存入变量的实体。最常见的用法就是匿名函数。
package main
func hello(){
fmt.Println("hello world")
}
func exec(f func()){
f()
}
func main(){
f := hello
exec(f)
}
5,函数只能判断其是否为nil,不支持其它比较操作
package main
func a(){}
func b(){}
func main(){
fmt.Println(a==nil)
fmt.Println(a == b ) //error
}
6,从函数返回局部变量指针是安全的,编译器会通过逃逸分析(escape analysis)来决定是否在堆上分配内存
package main
import "fmt"
func test() *int {
a := 0x100
return &a
}
func main(){
var a *int = test()
fmt.Println(a,*a)
}