在版本化包中使用Go語言的import路徑是一項重要的技能。通過正確的import路徑,我們可以輕松地引入和使用其他開發者創建的包。但是,對于初學者來說,理解import路徑在版本化包中的工作原理可能有些困惑。在本文中,php小編百草將為您詳細解釋import路徑的工作方式,并提供一些實用的技巧,幫助您更好地理解和使用import路徑。無論您是新手還是有經驗的開發者,本文都將為您提供有價值的信息和指導。讓我們開始吧!
問題內容
我有點好奇 golang 如何解析命名導入。
在此示例中,我將 echo 作為我的應用程序包。
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" ) ...
登錄后復制
但這似乎是一個解決方法。
解決方法
Go 文件的第一行使用 package
指令聲明包名稱。這是 import
在不是別名導入時解析為的名稱。當您需要消除具有相同包名稱但不同導入路徑的多個包之間的歧義時,可以使用別名導入。
go.mod
文件保存了 Go 包的導入路徑(對于 echo
來說是 github.com/labstack/echo/v4
)。正如 JimB 所說,包名稱不需要與導入路徑相對應,只是按照慣例這樣做。
rsc.io/quote(源代碼位于https://github.com/rsc/quote) 解釋了 Go 包版本控制和導入。您還可以查看 Russ Cox 解釋 Go 中的包版本控制的博客文章。