【发布时间】:2018-06-09 02:07:10
【问题描述】:
我在博客上看到了一个方法,并决定尝试让它工作,到目前为止我一直没有成功。我正在尝试使用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/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
知道如何解决这个问题吗?
【问题讨论】:
-
文档How to Write Go Code 解释了您可能遗漏的一些概念。
-
感谢您的链接;是的,我对 Go 还很陌生。虽然不能解决我的问题。
-
该文档直接讨论了如何从另一个包中引用一个包。您需要在 router.go 中导入“控制器”,并将接口称为
controllers. ControllerInterfaceGet。哦,答案是这样的。进行此更改后是否出现错误? -
哦,我明白了。很抱歉造成混乱:)
标签: go