user1604294
user1604294

Reputation:

Declare a type, where that type is a func that returns a struct{}

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

Answers (1)

David Maze
David Maze

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

Related Questions