go - 使用函数类型组
问题描述
我想使用函数类型并将其中一些组合在一起(通常将它们传递给其他函数)。
type bla func()
type bla2 func(string)
/* this one doesn't compile...
type blaer interface {
bla
bla2
}
*/
// this one compiles
type blaS struct {
bla
bla2
}
func main() {
s := blaS{
bla : func(){fmt.Println("Hello, playground")},
bla2 : func(s string){fmt.Println("Hello, ", s)},
}
s.bla()
s.bla2("world")
}
有没有办法在接口中使用它们?否则,您知道使用结构而不是接口有什么缺点吗?
解决方案
语法:
type blaer interface {
bla
bla2
}
声明一个带有两个成员变量的接口,而不是方法。您不能在接口中声明变量。
当您在这样的结构中使用函数类型时:
type blaS struct {
bla
bla2
}
您正在做的是定义一个具有两个成员变量的结构,一个名为bla
type bla
,另一个名为bla2
type bla2
。您可以使用s.bla()
,s.bla2()
但是,这并不意味着实现包含and方法s
的假设接口。因为这两个函数指针都不是类型的方法,所以没有实现接口。blaer
bla
bla2
blaS
s
因此,确切的答案取决于您的用例。如果需要使用接口,则必须将这两个函数定义为方法。如果您需要可以设置的函数指针,则必须使用结构。
推荐阅读
- laravel - 在 Laravel 5.7 中找出当前会话到期还有多长时间?
- python - 如何从numpy的数组中选择两个边界之间的点?
- pandas - 如何在 seaborn 的 swarmplot 中设置 x 坐标?
- ios - 无法将 Objective-C 私有属性转换为实例变量
- azure-iot-hub - 通过 Edge 网关进行 Azure IoT 协议转换多路复用
- sql-server - MSSQL:[新手角]根据匹配的条件将数据插入行
- javascript - 使用 PHP 网络爬虫来查找没有特定元素的特定单词
- python - 当我尝试转换 Keras MLP 时,为什么 Google Colab 会给出“未知设备”错误?
- javascript - 如何在输入的按键上停止允许特殊字符
- payment - 如何获得用户 Emoney Mangopay