Reputation:
I have this:
type HandlerCreator = func() struct{}
I am trying to declare a type, where the type is a func
that returns a struct{}
value.
so, yeah, a HandlerCreator
might look like:
type Handler struct{}
func CreateHandler() Handler {
return Handler{}
}
and I am trying to use that type in a map:
var Handlers = map[string]HandlerCreator{
"Register": register.CreateHandler, // <<<< compile error
}
but it says:
cannot use register.CreateHandler (type func() register.Handler) as type func() struct {} in map value
anyone know how to do this?
Golang won't even let me do this:
var Handlers = map[string]func(){
"Register": register.CreateHandler,
}
I get this error:
cannot use register.CreateHandler (type func() register.Handler) as type func() in map value
again, CreateHandler is just a simple func, shown above.
Upvotes: 0
Views: 302
Reputation: 158676
When you say
type Handler struct{}
then the Handler
type and an empty structure are different types. Therefore, a function returning Handler
and a function returning struct{}
are also of different types.
If I was doing it, I'd change the "creator" type to return the renamed return type
type HandlerCreator = func() Handler
but it should also work to change the function to return struct{}
, or to change Handler
to a type alias.
type Handler = struct{} // the "=" is important
Upvotes: 1