首页 > 解决方案 > 使用函数类型组

问题描述

我想使用函数类型并将其中一些组合在一起(通常将它们传递给其他函数)。

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")
}

有没有办法在接口中使用它们?否则,您知道使用结构而不是接口有什么缺点吗?

标签: gotypes

解决方案


语法:

type blaer interface {
    bla
    bla2
}

声明一个带有两个成员变量的接口,而不是方法。您不能在接口中声明变量。

当您在这样的结构中使用函数类型时:

type blaS struct {
    bla
    bla2
}

您正在做的是定义一个具有两个成员变量的结构,一个名为blatype bla,另一个名为bla2type bla2。您可以使用s.bla()s.bla2()但是,这并不意味着实现包含and方法s的假设接口。因为这两个函数指针都不是类型的方法,所以没有实现接口。blaerblabla2blaSs

因此,确切的答案取决于您的用例。如果需要使用接口,则必须将这两个函数定义为方法。如果您需要可以设置的函数指针,则必须使用结构。


推荐阅读