为了账号安全,请及时绑定邮箱和手机立即绑定

Go:如何在不重命名的情况下处理包冲突?

Go:如何在不重命名的情况下处理包冲突?

Go
智慧大石 2021-12-27 17:50:04
我试图在不重命名的情况下解决包冲突,因为我认为它不是特别优雅。所以目前我有自己的中间件,它只处理数据库连接,但我也使用 Echo 的中间件。Echo 也使用中间件作为中间件的包名。所以我试图实现的解决方案是一种可以扩展 Echo 包的解决方案。但我没有任何成功,也没有找到任何关于这样做的信息。在此处查看 echo 中间件:https : //github.com/labstack/echo/tree/master/middlewaremain.gopackage mainimport (    "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 middlewareimport (    . "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 prefixvar _ = Logger()GO 的编译失败,因为Logger()和Recover()函数尽管被大写但没有导出 - 而db.go包中的Db()被导出。
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

您的导入解决方案不起作用,因为即使 echomiddleware包是在没有标识符的情况下导入的,其导出的标识也不属于您的middleware包的一部分。点导入只是一种语法糖……顺便说一下,不建议使用它。


如果您真的不想使用包重命名(恕我直言,这是更好的解决方案),您可以定义自己的方法来在包中创建中间件。


package middleware


import "github.com/labstack/echo"

import "github.com/labstack/echo/middleware"


func Logger () echo.MiddlewareFunc {

    return middleware.Logger()

}

这将有效地消除对echo/middleware主代码中的包的需求,代价是不需要真正需要的重复代码。


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信