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