【Golang系列】-函数的类型和函数变量
2022-03-13
函数的类型和函数变量
可以使用type关键字来定义一个函数类型,语法:
type fun func(int ,int)int
定义了一个fun函数类型,它是一种函数类型,这种函数类型接受两个int类型的参数,并且返回一个int类型的返回值。
定义一个求和函数和一个比大小函数
package main
func sum(a int, b int) int {
return a + b
}
func max(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
定义一个fun函数类型把sum和max赋值给它
package main
import "fmt"
type fun func(int, int) int
func sum(a int, b int) int {
return a + b
}
func max(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
func main() {
var f fun
f = sum
s := f(1, 2)
fmt.Println(s)
m := f(3, 4)
fmt.Println(m)
}
高阶函数
函数可以作为一个参数传递给另外一个函数,还可以作为另外一个函数的返回值返回
函数作为参数
package main
import "fmt"
func sayHello(name string) {
fmt.Println(name)
}
func f1(name string, f func(string)) {
f(name)
}
func main() {
f1("caolihui", sayHello)
}
函数作为返回值
package main
import "fmt"
func add(x, y int) int {
return x + y
}
func sub(x, y int) int {
return x - y
}
func cal(s string) func(int, int) int {
switch s {
case "+":
return add
case "-":
return sub
default:
return nil
}
}
func main() {
add := cal("+")
r := add(1, 2)
fmt.Println(r)
fmt.Println("==========")
sub := cal("-")
r = sub(100, 50)
fmt.Println(r)
}
匿名函数
- go语言函数不能嵌套,但是在函数内部可以定义匿名函数,实现一下简单功能调用
- 所谓匿名函数,就是没有名称的函数
语法:
func (函数列表)(返回值)
匿名函数示例:
package main
import "fmt"
func main() {
max := func(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
i := max(1, 2)
fmt.Println(i)
}
自己执行
package main
import "fmt"
func main() {
func(a int, b int) {
max := 0
if a > b {
max = a
} else {
max = b
}
fmt.Println(max)
}(1, 2)
}