I want to put my router config in an extern json config file like so:
{
"routes": [
{
"name": "Index",
"method": "GET",
"pattern": "/",
"handler": "Index"
},
{
"name": "CountsIndex",
"method": "GET",
"pattern": "/counts",
"handler": "CountsIndex"
}
]
}
My related struct looks like so:
type Route struct {
Name string `json:"name"`
Method string `json:"method"`
Pattern string `json:"pattern"`
HandlerFunc http.HandlerFunc `json:"handler"`
}
type Routes []Route
The Problem is the handlerFunc. When I get the config it will be a string but how to make it a go value? Can I cast it somehow?
Following error occures:
json: cannot unmarshal string into Go value of type http.HandlerFunc
Thanks
The simplest solution is to have a string instead of the http.HandlerFunc as type, and define a map with the functions.
var functions = map[string]interface{}{
"func1": func1,
}
then after unmarshalling your json you can assign the handler using the handlername of each route
The problem is, that not every data could be marshaled to json (or unmarshaled). http.HandlerFunc is not a function (https://golang.org/pkg/net/http/#HandlerFunc). You cannot put it directly - but you can change handler to string and on the place when you trying to call it obtain HandlerFunc from reflect (a quite complicated) or from prepared map[string]HandlerFunc.