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

Go:如何在不重命名的情况下处理包冲突?,go,middleware,Go,Middleware,我试图解决一个包冲突而不重命名,因为我认为它不是特别优雅。所以目前我有自己的中间件,它只处理数据库连接,但我也使用Echo的中间件。Echo也使用中间件作为其中间件的包名 所以我尝试实现的解决方案是一个扩展Echo包的解决方案。但我没有取得任何成功,也没有找到任何关于这样做的信息 请参见此处的echo中间件: 梅因,加油 中间件结构 因此db.go和echo.go都打包为中间件,但我无法从导入的echo包中“导出”函数 去吧 GO的编译失败,因为Logger()和Recover()函数即使大写也

我试图解决一个包冲突而不重命名,因为我认为它不是特别优雅。所以目前我有自己的中间件,它只处理数据库连接,但我也使用Echo的中间件。Echo也使用中间件作为其中间件的包名

所以我尝试实现的解决方案是一个扩展Echo包的解决方案。但我没有取得任何成功,也没有找到任何关于这样做的信息

请参见此处的echo中间件:

梅因,加油 中间件结构 因此db.go和echo.go都打包为中间件,但我无法从导入的echo包中“导出”函数

去吧
GO的编译失败,因为Logger()和Recover()函数即使大写也不会导出,而Db.GO包中的Db()会被导出。

您的导入解决方案不起作用,因为即使echo
中间件导入时没有标识符,它不属于
中间件
包的一部分。dot导入只是一种合成糖…顺便说一下,不推荐使用

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

package middleware

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

func Logger () echo.MiddlewareFunc {
    return middleware.Logger()
}

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

但是对于echo/middleware中的每个函数,是否有一种实用的方法来做到这一点?tbh,正如你所说,如果这是我唯一能走的路线,那么我最好将我的pkg重命名。
├── middleware
│   ├── db.go //Custom middleware
│   └── echo.go //Echo middleware
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()
package middleware

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

func Logger () echo.MiddlewareFunc {
    return middleware.Logger()
}