声明一个类型,其中该类型是一个返回struct {}的函数

时间:2018-10-28 01:55:38

标签: go

我有这个:

type HandlerCreator = func() struct{}

我正在尝试声明一个类型,该类型是一个返回struct {}值的func。

是的,一个HandlerCreator可能看起来像:

type Handler struct{}

func CreateHandler() Handler {
    return Handler{}
}

我正在尝试在地图中使用该类型:

var Handlers = map[string]HandlerCreator{
    "Register": register.CreateHandler,  // <<<< compile error
}

但它说:

  

不能将register.CreateHandler(func()register.Handler类型)用作   在地图值中输入func()struct {}

有人知道该怎么做吗?

Golang甚至不允许我这样做:

var Handlers = map[string]func(){
    "Register": register.CreateHandler,
}

我收到此错误:

cannot use register.CreateHandler (type func() register.Handler) as type func() in map value

再次,CreateHandler只是一个简单的函数,如上所示。

1 个答案:

答案 0 :(得分:2)

当你说

type Handler struct{}

然后是Handler类型和一个空结构are different types。因此,返回Handler的函数和返回struct{}的函数也是不同的类型。

如果要这样做,我将更改“创建者”类型以返回重命名的返回类型

type HandlerCreator = func() Handler

但它也应该用于更改函数以返回struct{}或将Handler更改为type alias

type Handler = struct{} // the "=" is important