我有点好奇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"
)
...
但这似乎是一个变通办法。
问候!
2条答案
按热度按时间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语言包的版本控制。
g2ieeal72#
导入包时,名称将为包名 * a,而不是文件夹名**。
在您的示例中,如图所示,文件夹名为
v4
,但包名为echo
,因此它将被解析为echo
。使用与文件夹名称相同的包名称是一个很好的推荐约定,
但是主要版本的文件夹版本控制是已知且有效的。