我试图在不重命名的情况下解决包冲突,因为我认为它不是特别优雅。所以目前我有自己的中间件,它只处理数据库连接,但我也使用 Echo 的中间件。Echo 也使用中间件作为中间件的包名。
所以我试图实现的解决方案是一种可以扩展 Echo 包的解决方案。但我没有任何成功,也没有找到任何关于这样做的信息。
在此处查看 echo 中间件:https : //github.com/labstack/echo/tree/master/middleware
main.go
package main
import (
"github.com/facebookgo/grace/gracehttp"
"github.com/labstack/echo"
"github.com/labstack/echo/engine/standard"
"gitlab.com/project/middleware" //This is the middleware repository
"github.com/asaskevich/govalidator"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"encoding/json"
"log"
)
func main() {
e := echo.New()
e.Use(middleware.Db()) //Custom middleware
e.Use(middleware.Logger()) //Echo middleware
e.Use(middleware.Recover()) //Echo middleware
//Compile fails because Logger and Recover are not being exported.
e.Post("/", createUser())
e.Get("/", getUser())
e.Put("/", updateUser())
e.Delete("/", removeUser())
s := standard.New(":3000")
s.SetHandler(e)
gracehttp.Serve(s.Server)
}
中间件结构
├── middleware
│ ├── db.go //Custom middleware
│ └── echo.go //Echo middleware
所以db.go和echo.go都打包为middleware,但我无法从导入的 Echo 包中“导出”函数。
回声
package middleware
import (
. "github.com/labstack/echo/middleware"
)
//Stop compiler errors
//Echo middleware is usually accessed with middleware.Logger
//But by using the preceding dot, you can drop the prefix
var _ = Logger()
GO 的编译失败,因为Logger()和Recover()函数尽管被大写但没有导出 - 而db.go包中的Db()被导出。
ITMISS
相关分类