繁体   English   中英

golang函数,带前导“ ***类型”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM