I have packages, that are similar in functionality, as they are web request handlers.
I have functions like this for Home page in each package:
package home_page_handler
func GetUrl() string {
return "/"
}
func GetPageName() string {
return "HomePage"
}
To structure the code better, I wonder if I can add a restriction, may be via interfaces to make each package of some "class" contain these functions?
That way if I add one more handler, it will throw an error while compiling if a function is missing or has a wrong signature.
You could "register" each package with a call
package server
type PageHandler {
url, name func() string
}
var Handlers = []PageHandler
func RegisterHandler(url func()string, name func()string) {
Handlers = append(Handlers, PageHandler{url, name})
}
...
package home_page
...
func init() {
server.RegisterHandler(GetUrl, GetPageName)
}
The package won't compile unless GetUrl
and GetPageName
are provided and the function signature is correct.