Golang JSON 路由配置
Golang JSON config for routes
我一直在尝试设置一个 JSON 配置文件来为我的应用程序设置动态路由。我的想法是,我将能够根据谁在使用该服务来设置我自己的 URL 结构。我有一个接受 JSON 并且工作正常的结构。我正在使用大猩猩多路复用器。
type CustomRoute struct {
Name string
Method string
Path string
HandleFunc string
}
JSON 与结构基本相同,并且运行良好。
我遇到的问题是获取 HandleFunc 部分。
代码如下:
func NewRouter() *mux.Router {
routerInstance := mux.NewRouter().StrictSlash(true)
/*
All routes from the routing table
*/
// r = []CustomRoute with the JSON data
r := loadRoute()
for _, route := range r {
var handler http.Handler
handler = route.HandlerFunc
handler = core.Logger(handler, route.Name)
routerInstance.
Methods(route.Method).
Path(route.Path).
Name(route.Name).
Handler(handler)
}
return routerInstance
}
我总是收到以下错误(正如人们所预料的那样)
cannot use route.HandlerFunc (type string) as type http.Handler in assignment:
string does not implement http.Handler (missing ServeHTTP method)
有人告诉我使用类似的东西:
var functions = map[string]interface{}{
"HandleFunc1": HandleFunc1,
}
但我不知道该怎么做
我正在为子域使用多路复用器,所以我的示例可能有点偏离。您被告知要使用的地图是这样完成的:
type Handlers map[string]http.HandlerFunc
func (handlers Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if handle := handlers[path]; handle != nil {
handle.ServeHTTP(w, r)
} else {
http.Error(w, "Not found", 404)
}
}
感谢 RayenWindspear 我能够解决这个问题。这非常简单(就像一切一样)。地图代码应如下所示:
var functions = map[string]http.HandlerFunc{
"HandleFunc1": HandleFunc1,
}
我一直在尝试设置一个 JSON 配置文件来为我的应用程序设置动态路由。我的想法是,我将能够根据谁在使用该服务来设置我自己的 URL 结构。我有一个接受 JSON 并且工作正常的结构。我正在使用大猩猩多路复用器。
type CustomRoute struct {
Name string
Method string
Path string
HandleFunc string
}
JSON 与结构基本相同,并且运行良好。
我遇到的问题是获取 HandleFunc 部分。
代码如下:
func NewRouter() *mux.Router {
routerInstance := mux.NewRouter().StrictSlash(true)
/*
All routes from the routing table
*/
// r = []CustomRoute with the JSON data
r := loadRoute()
for _, route := range r {
var handler http.Handler
handler = route.HandlerFunc
handler = core.Logger(handler, route.Name)
routerInstance.
Methods(route.Method).
Path(route.Path).
Name(route.Name).
Handler(handler)
}
return routerInstance
}
我总是收到以下错误(正如人们所预料的那样)
cannot use route.HandlerFunc (type string) as type http.Handler in assignment: string does not implement http.Handler (missing ServeHTTP method)
有人告诉我使用类似的东西:
var functions = map[string]interface{}{
"HandleFunc1": HandleFunc1,
}
但我不知道该怎么做
我正在为子域使用多路复用器,所以我的示例可能有点偏离。您被告知要使用的地图是这样完成的:
type Handlers map[string]http.HandlerFunc
func (handlers Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if handle := handlers[path]; handle != nil {
handle.ServeHTTP(w, r)
} else {
http.Error(w, "Not found", 404)
}
}
感谢 RayenWindspear 我能够解决这个问题。这非常简单(就像一切一样)。地图代码应如下所示:
var functions = map[string]http.HandlerFunc{
"HandleFunc1": HandleFunc1,
}