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






