Я видел метод в блоге и решил попытаться заставить его работать, но пока я потерпел неудачу.Я пытаюсь сделать маршруты с gorilla/mux
и структурами / интерфейсами.Основная проблема заключается в том, что я не могу получить доступ к интерфейсам, когда структура передается в качестве параметра функции.
main.go:
package main
import (
router "routers/web"
)
func main() {
router.Serve()
}
routers / router.go
package router
import (
"net/http"
"github.com/gorilla/mux"
)
func Route(path string, ct interface{}) {
r := mux.NewRouter()
//ct prints {Controller:{ControllerInterfaceGet:<nil>}}
if c, ok := ct.(ControllerInterfaceGet); ok {
r.HandleFunc(path, http.HandlerFunc(c.Get)).Methods("GET")
}
}
func Init() {
http.ListenAndServe(":8080", nil)
}
маршрутизаторы / web / web.go:
package routerweb
import (
"controllers/web"
"routers"
)
func Serve() {
router.Route("/", webtest.TestController{})
router.Init()
}
controllers / controller.go:
package controllers
import (
"net/http"
)
type Controller struct {
ControllerInterfaceGet
}
type ControllerInterfaceGet interface {
Get(w http.ResponseWriter, r *http.Request)
}
И, наконец, контроллер для определенного маршрута:
package webtest
import (
"controllers"
"net/http"
)
type TestController struct {
controllers.Controller
}
func (p TestController) Get(w http.ResponseWriter, r *http.Request) {
println("Hello World")
}
Я сделал некоторую отладку, и всякий раз, когда я пытаюсь скомпилировать ее, она выдает мне эту ошибку:
# routers
.\router.go:14:18: undefined: ControllerInterfaceGet
Есть идеи, как решить эту проблему?