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

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.