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,
}