Go语言的type func()用法

发布时间 2023-05-07 23:40:25作者: 厚礼蝎

golang通过type定义函数类型

在 Go 语言中,type 可以定义任何自定义的类型

比如熟悉的:type dog struct{}type myInt int 等等

所以 func 也是可以作为类型自定义的,type myFunc func(int) int,意思是自定义了一个叫 myFunc 的函数类型,这个函数的签名必须符合输入为 int,输出为 int。

golang通过type定义函数类型

通过 type 可以定义函数类型,格式如下

type typeName func(arguments) retType

函数类型也是一种类型,故可以将其定义为函数入参 ,在 go 语言中函数名可以看做是函数类型的常量,所以我们可以直接将函数名作为参数传入的函数中。

demo

package main

import "fmt"

//add函数也实现了op的函数签名,可以被认为是op的一种实现
func add(a, b int) int {
	return a + b
}

//sub符合op的签名,所以函数名可以看成是 op 类型的常量或者实现
func sub(a, b int) int {
	return a - b
}

//定义函数类型 op 的签名
type op func(a, b int) int

//这个函数的第一个参数指定了一个函数签名op,只要符合op函数签名的函数,就可以作为参数传入
func Oper(fu op, a, b int) int {
	return fu(a, b)
}

func main() {
	//在go语言中函数名可以看做是函数类型的常量,所以我们可以直接将函数名作为参数传入的函数中。
	aa := Oper(add, 1, 2)
	fmt.Println(aa)
	bb := Oper(sub, 1, 2)
	fmt.Println(bb)
}