在Go语言中,函数也是一种类型,可以和其他类型一样保存在变量中
示例代码:
定义了一个函数变量 f,并将一个函数名为 fire() 的函数赋给函数变量 f,这样调用函数变量 f 时,实际调用的就是 fire() 函数
package main
?
import "fmt"
?
func printValue() {
fmt.Println("Hello")
}
?
func main() {
var f func()
?
f = printValue
f()
}
代码分析:
func printValue() {
fmt.Println("Hello")
}
定义了一个printValue()
函数
var f func()
将变量 f
声明为 func()
类型,此时 f
称为“回调函数”,此时 f 的值为 nil。
f = printValue
将printValue()
函数作为值,赋给函数变量f
,此时f
的值为 printValue()
函数。
调用f()
实际是调用printValue()
Go中函数返回值的特点:
支持多返回值,多返回值能方便地获得函数执行后的多个返回参数
多返回值中的最后一个返回参数返回函数执行中可能发生的错误
示例代码:
conn, err := connectToNetwork()
/*
connectToNetwork 返回两个参数,conn 表示连接对象,err 返回错误信息
*/
同一种类型的返回值
返回值是同一种类型,则用括号将多个返回值类型括起来,用逗号分隔每个返回值的类型
package main
?
import "fmt"
?
func comeBack() (int, int) {
return 1,2
}
?
func main() {
fmt.Println(comeBack())
}
带有变量名的返回值
package main
?
import "fmt"
?
func comeBack() (a,b int) {
return 1,2
}
?
func main() {
fmt.Println(comeBack())
}
因为函数变量的存在所以调用函数变得尤为重要
特点:
函数在定义后,可以通过调用的方式,调用前的函数局部变量都会被保存起来不会丢失
被调用的函数运行结束后,恢复到调用函数的下一行继续执行代码,之前的局部变量也能继续访问。
原文:https://www.cnblogs.com/JunkingBoy/p/15232413.html