【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)
}