php小編新一在這里為大家介紹一下GoLang中的一個(gè)常見(jiàn)問(wèn)題:自定義包導(dǎo)入問(wèn)題。在Go語(yǔ)言開(kāi)發(fā)中,我們經(jīng)常需要使用自定義的包來(lái)實(shí)現(xiàn)一些特定的功能。然而,在導(dǎo)入自定義包時(shí),有時(shí)候會(huì)出現(xiàn)一些問(wèn)題,比如包找不到、包名沖突等。本文將詳細(xì)解答這些問(wèn)題,并提供解決方案,幫助開(kāi)發(fā)者更好地處理自定義包導(dǎo)入問(wèn)題,提高開(kāi)發(fā)效率。
問(wèn)題內(nèi)容
我正在學(xué)習(xí) golang,遇到了一個(gè)問(wèn)題。
我使用 go mod init main
創(chuàng)建了 mod 文件
接下來(lái)我創(chuàng)建了控制器和路由文件夾,如下所示:
├── contollers │?? └── users.controller.go ├── routes │?? ├── index.go │?? └── users.routes.go ├── vendor │ └── modules.txt ├── go.mod ├── go.sum └── main.go
登錄后復(fù)制
在 mod 文件中,模塊看起來(lái)像這樣
模塊main
現(xiàn)在,當(dāng)我嘗試將控制器導(dǎo)入路由器時(shí),它給了我導(dǎo)入錯(cuò)誤。
我一直在做以下事情。
嘗試 – 1
import ( "$gopath/controllers" "github.com/gin-gonic/gin" )
登錄后復(fù)制
它給出了 invalid import path: "$gopath/controllers"syntax
錯(cuò)誤
嘗試 – 2
import ( "$gopath/main/controllers" "github.com/gin-gonic/gin" )
登錄后復(fù)制
同樣的錯(cuò)誤
嘗試 – 3
import ( "main/controllers" "github.com/gin-gonic/gin" )
登錄后復(fù)制
控制器.go
package controllers; import ( "fmt" "github.com/gin-gonic/gin" ) func healthcheck() gin.handlerfunc { return func (c *gin.context) { fmt.println("reached controller") } }
登錄后復(fù)制
路由器.go
package routes import ( "bootcamp.com/server/controllers" "github.com/gin-gonic/gin" ) func UserRouters(inComingRoutes *gin.Engine) { inComingRoutes.GET("/api/health", controllers.HealthCheck()); }
登錄后復(fù)制
拋出這樣的錯(cuò)誤,無(wú)法導(dǎo)入main/controllers(沒(méi)有必需的模塊提供包“main/controllers”)
我已經(jīng)被這個(gè)問(wèn)題困擾了 3-4 個(gè)小時(shí),有人可以建議我如何將該控制器導(dǎo)入到我的路線中。
提前致謝。
解決方法
-
通過(guò)編輯
go.mod
修改模塊路徑:
- module main + module example.com/hello
登錄后復(fù)制
-
修改導(dǎo)入路徑:
import ( - "main/controllers" + "example.com/hello/controllers" "github.com/gin-gonic/gin" )
登錄后復(fù)制
controller.go
(刪除尾隨的 ;
):
- package controllers; + package controllers
登錄后復(fù)制
將目錄 contollers
重命名為 controllers
以匹配包名(缺少 r
)。
刪除 vendor
文件夾。
說(shuō)明:
main
在go中有特殊的含義。引自 golang 規(guī)范:
一個(gè)完整的程序是通過(guò)將一個(gè)名為主包的單個(gè)未導(dǎo)入包與其導(dǎo)入的所有包以傳遞方式鏈接起來(lái)創(chuàng)建的。主包必須具有包名稱 main 并聲明一個(gè)不帶參數(shù)且不返回值的函數(shù) main。
-
不帶點(diǎn)的導(dǎo)入路徑是為標(biāo)準(zhǔn)庫(kù)和 go 工具鏈保留的。請(qǐng)參閱cmd/go:保留不帶點(diǎn)的模塊名稱的文檔。