定义

结构化最小模块单元,将复杂的算法过程分解为若干个较小任务,这些认为可在多处复用。
函数是一等公民

  • 无须前置声明。(未解其意,何谓“前置声明”)
  • 不支持命名嵌套定义。(未解其意,何谓“命名嵌套定义”)
  • 不支持同名函数重载。
  • 不支持默认参数。(哪些语言的函数有默认参数,未解其意)
  • 支持不定长变参。
  • 支持多返回值
  • 支持命名返回值。
  • 支持匿名函数闭包
1
2
3
4
5
6
7
8
9
10
11
12
func hello(){
fmt.Println("hello world")
}
func exec(f func()){ //函数作为参数
f()
}
func main(){
h := hello
exec(h)
}

函数只能判断是否为nil,不能判断其他

1
2
3
4
5
6
7
8
9
10
11
12
func a (){
}
func b(){
}
func main(){
fmt.Println(a == nil) // 输出 false
fmt.Pringln(a == b) //报错,无效操作
}

参数

  • 无论是指针、引用类型还是其他类型参数,都是值传递。区别无非是拷贝目标对象还是拷贝指针。在函数内对参数进行操作,都不会影响原值。
  • 在函数调用前,会为形参和返回值分配内存空间,并将实参拷贝到形参的内存上。

变参

变参实际上是一个切片。只能接收同类型参数