Go语言 转到导入别名

mitkmikd  于 2023-01-06  发布在  Go
关注(0)|答案(2)|浏览(143)

我有点好奇Golang是如何解析命名导入的。
在这里的例子中,我得到了回声作为我的应用程序包。

package main

import (
    "net/http"

    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":1323"))
}

import行所示,Echo实际上是被它的"v4"版本引用的,但Go语言可以解析为"echo",我已经深入研究了Echo的Repo,但没有发现Go语言如何解析这个问题。
PS:在过去,我使用它与别名,如:

...
import (
    echo "github.com/labstack/echo/v4"
)
...

但这似乎是一个变通办法。
问候!

wvt8vs2t

wvt8vs2t1#

Go语言文件的第一行使用package指令声明包名,这是import在没有别名导入时解析的名称,当需要区分多个包名相同但导入路径不同的包时,可以使用别名导入。
go.mod文件保存了Go包的导入路径(对于echo,就是github.com/labstack/echo/v4),正如JimB所说,包名不需要对应导入路径,只是按照约定。
rsc.io/quote(源代码在https://github.com/rsc/quote)解释了Go语言包的版本控制和导入,你也可以参考Russ考克斯的blog posts解释Go语言包的版本控制。

g2ieeal7

g2ieeal72#

导入包时,名称将为包名 * a,而不是文件夹名**。
在您的示例中,如图所示,文件夹名为v4,但包名为echo,因此它将被解析为echo

使用与文件夹名称相同的包名称是一个很好的推荐约定,
但是主要版本的文件夹版本控制是已知且有效的。

相关问题