📜  Go 中函数的指针(1)

📅  最后修改于: 2023-12-03 15:01:00.407000             🧑  作者: Mango

Go 中函数的指针

在 Go 语言中,函数也是一种类型。因此,我们可以像操作其他类型一样操作函数,包括使用指针。本文将介绍 Go 中函数的指针相关内容。

函数指针的定义

在 Go 中,函数的类型可以表示为 func(param_type) return_type。因此,函数指针的定义遵循指针类型的规则,表示为 *func(param_type) return_type

例如,下面的代码展示了如何定义一个名为 add 的函数,以及定义该函数的指针类型 addFunc

func add(x, y int) int {
    return x + y
}

type addFunc func(int, int) int

var fn addFunc = add

在上面的代码中,addFunc 是一个函数指针类型,fn 变量是 addFunc 类型,通过将函数 add 赋值给 fn 变量,实际上是将 add 的地址赋值给了 fn

函数指针作为参数

函数指针可以作为函数的参数传递。例如,下面的代码展示了如何定义一个接受函数指针参数的函数:

func operate(x, y int, fn func(int, int) int) int {
    return fn(x, y)
}

上面的代码中,函数 operate 接受三个参数:两个整数 xy,以及一个类型为 func(int, int) int 的函数指针 fn。在函数内部,我们调用 fn 函数,并将 xy 作为参数传递给它。

调用 operate 函数时,我们可以传递任何类型为 func(int, int) int 的函数的指针。例如,我们可以使用前面介绍的 add 函数的指针作为参数:

result := operate(4, 5, add)

在上面的代码中,add 是一个函数,我们将它的地址作为 operate 函数的第三个参数传递了进去。由于 add 的类型是 func(int, int) int,因此它符合 operate 函数第三个参数的类型要求。

函数指针作为返回值

函数指针还可以作为函数的返回值,例如:

func getAddFunc() addFunc {
    return add
}

上面的代码中,函数 getAddFunc 返回类型为 addFunc 的函数指针。在函数内部,我们简单地通过 return 语句返回了 add 函数的地址。

当调用 getAddFunc 函数时,我们将得到一个 addFunc 类型的函数指针。可以使用该指针来调用 add 函数:

addFn := getAddFunc()
result := addFn(4, 5)

在上面的代码中,getAddFunc 函数返回了 add 函数的地址,我们将其赋值给了 addFn 变量。然后,我们使用 addFn 变量调用了 add 函数,并将 45 作为参数传递给它。

总结

本文介绍了 Go 中函数指针的相关内容,包括函数指针的定义、如何将函数指针作为参数和返回值传递。函数指针是在操作函数时很有用的一种工具,可以帮助我们更好地对函数进行操作和控制。