gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:45:23 26 4
gpt4 key购买 nike

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

所以我尝试实现的解决方案是扩展 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.goecho.go 都被打包为中间件,但我无法“导出”函数来自导入的 Echo 包。

回声.go

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 包被导出。

最佳答案

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

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

package middleware

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

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

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

关于Go:如何在不重命名的情况下处理包冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com