我在博客上看到了一种方法,并决定尝试使其工作,到目前为止我一直没有成功。我尝试使用gorilla/mux
和结构/接口创建路由。这里的主要问题是当结构作为函数参数传递时,我无法访问接口。
main.go:
package main
import (
router "routers/web"
)
func main() {
router.Serve()
}
路由器/ 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.go:
package routerweb
import (
"controllers/web"
"routers"
)
func Serve() {
router.Route("/", webtest.TestController{})
router.Init()
}
控制器/ 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
知道如何解决这个问题吗?
答案 0 :(得分:1)
您遇到的直接问题是两者都在不同的包中。您应该将其称为controllers.ControllerInterfaceGet
。