Golang:json文件中的路由器配置
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
我想将路由器配置放入外部json配置文件中,例如: p>
{
“ routes”:[
{
“ name”:“ Index”,
“ method”:“ GET”,
“ pattern”:“ /”,
“ handler“:”索引“
},
{
” name“:” CountsIndex“,
” method“:” GET“,
” pattern“:” / counts“,
” handler“: “ CountsIndex”
}
]
}
code> pre>
我的相关结构如下: p>
类型Route struct {
名称字符串`json:“ name”`
方法字符串`json:“ method”`
模式字符串`json:“ pattern”`
HandlerFunc http.HandlerFunc`json:“ handler”`
}
键入Routes [] Route
code> pre>
问题是处理程序功能。 当我得到配置时,它将是一个字符串,但是如何使其成为go值? 我可以以某种方式投射它吗? p>
发生以下错误: p>
json:无法将字符串解组为http.HandlerFunc类型的Go值 p>
blockquote>
谢谢 p>
div>
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.