[英]golang function with leading “type ***”
type ApplyFunc func(commitIndex uint64, cmd []byte) []byte
对于此声明。 我的理解是,这是一个函数指针。 它的名称是ApplyFunc。 并且此函数将commitIndex和cmd作为输入。 它返回[] byte。
我的理解正确吗? 谢谢!
Golang函数是一流的,如下面的go-example页面所示 。
这是一个命名类型 ,这意味着您可以在需要func(commitIndex uint64, cmd []byte) []byte
任何地方使用ApplyFunc
:请参阅“ Golang:为什么我可以键入别名函数并在不进行强制转换的情况下使用它们? ”。
正如Volker所说,这意味着它不是函数,也不是“函数的指针”。
它是一种类型 ,它允许您声明一个变量,该变量存储任何函数,该函数尊重与其声明的类型相同的func签名,例如函数文字 (或“匿名函数”)。
var af ApplyFunc = func(uint64,[]byte) []byte {return nil}
// (function literal or "anonymous function")
请参阅“ 匿名函数和闭包 ”:您可以定义一个函数,该函数利用闭包返回另一个函数:
函数文字是闭包的 :它们可以引用在周围函数中定义的变量。
然后,这些变量在周围的函数和函数文字之间共享,并且只要可以访问它们就可以保留。
(请参阅操场示例 )
type inc func(digit int) int
func getIncbynFunction(n int) inc {
return func(value int) int {
return value + n
}
}
func main() {
g := getIncbynFunction
h := g(4)
i := g(6)
fmt.Println(h(5)) // return 5+4, since n has been set to 4
fmt.Println(i(1)) // return 1+6, since n has been set to 6
}
另外,如“ Golang函数指针作为结构的一部分 ”中所示,您可以在函数接收器ApplyFunc
(!)上定义函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.