package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "time" "github.com/gorilla/mux" ) type Route struct { Name string Method string Pattern string HandlerFunc http.HandlerFunc } //server config type ServerConfig struct { ServerIP string `json:"serverIP"` ServerPort string `json:"serverPort"` AllowedIPs []string `json:"allowedIPs"` BlockedIPs []string `json:"blockedIPs"` } var serverConfig ServerConfig func readServerConfig(path string) { file, err := ioutil.ReadFile(path) if err != nil { fmt.Println("error: ", err) } content := string(file) json.Unmarshal([]byte(content), &serverConfig) } func Logger(inner http.Handler, name string) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() inner.ServeHTTP(w, r) log.Printf( "%s\t%s\t%s\t%s", r.Method, r.RequestURI, name, time.Since(start), ) }) } func NewRouter() *mux.Router { router := mux.NewRouter().StrictSlash(true) for _, route := range routes { var handler http.Handler handler = route.HandlerFunc handler = Logger(handler, route.Name) router. Methods(route.Method). Path(route.Pattern). Name(route.Name). Handler(handler) } return router }