Go導(dǎo)入不同目錄下包報錯的解決方法
一次正確的配置
結(jié)果文件結(jié)構(gòu)
這是操作完畢后的完整文件結(jié)構(gòu)樹狀圖,接下來將帶大家一步一步完成它
特別注意!入口文件 main.go 和 go.mod 在同一目錄下!這一點必須要保證!
└─gindemo.com
│ go.mod
│ go.sum
│ main.go
│
├─.idea
│ .gitignore
│ gindemo.com.iml
│ modules.xml
│ workspace.xml
│
└─src
└─Chapter1
C1.go
創(chuàng)建項目
該項目創(chuàng)建使用goland2020
任選一個文件夾創(chuàng)建目錄,注意項目的名字最好依照這個格式: xxx.xxx
點號的后綴隨便寫,只要保證上面這樣的格式就好了
我們新建一個項目 gindemo.com
此時打開 goland 的設(shè)置頁面,設(shè)置好 GOROOT GOPATH
設(shè)置過程請參考 gin 相關(guān)文章!
新建文件 main.go (和 go.mod 同目錄)
// 入口點入口點?。?!必須要main?。?!別忘了求求你了
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
app := gin.Default()
app.GET("/shit", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{
"error": "shit",
})
})
app.Run(":10086")
}
這是一個最簡單的 gin 后端,因為我們之前配置好了 GOPATH ,所以這里 goland 會為我們自動導(dǎo)包,故不會出現(xiàn)飄紅現(xiàn)象!
但實際上 go.mod 內(nèi)部依然沒有配置依賴,我們需要在項目目錄下打開命令行,輸入 go mod tidy 為我們自動處理好依賴關(guān)系;
此時配置好運行參數(shù)直接運行 main 方法就可以開啟我們的后端服務(wù)了
不同文件夾下導(dǎo)包
新建文件(大小寫不是必要的) src/Chapter1/C1.go
代碼不是重點,我們要做的是在 main.go 里面使用該文件的 BindDemo 方法
方法名需要大寫開頭!
package Chapter1
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
...
func BindDemo(c *gin.Context) {
...
}
來到我們的 go.mod
來分析一下最關(guān)鍵的三行內(nèi)容
- 第一行即 gomod 管理的所在包名稱
- 第二行即 go 版本
- 第三行及剩余行即導(dǎo)入的依賴
module gindemo.com go 1.19 require github.com/gin-gonic/gin v1.8.2
此時記下我們 go.mod 管理的包名叫做: gindemo.com (其實就是咱們的項目名)
打開 main.go 修改代碼為
package main
import (
// 這表示取別名,用小寫字母c代表后面導(dǎo)入的內(nèi)容
c "gindemo.com/src/Chapter1"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
app := gin.Default()
app.GET("/shit", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{
"error": "shit",
})
})
// 在這里調(diào)用 C1.go 文件內(nèi)的方法
app.GET("/c1",c.BindDemo)
app.Run(":10086")
}
我們來分析一下 import 里面這行代碼的含義:c "gindemo.com/src/Chapter1"
- 小寫字母 c,表示給后面的包取個別名,我們之后直接使用 c 來調(diào)用
- 導(dǎo)包絕不可以使用相對路徑,必須要用 go.mod 里面 module 行給出的路徑打頭,然后依次索引到我們的文件
- 這里是直接導(dǎo)入 Chapter1 整個包,也即導(dǎo)入其所擁有的所有 go 文件
此時你發(fā)現(xiàn) goland 直接飄紅,但這不是我們的問題!直接運行是可以跑起來的!
由于我們直接導(dǎo)入 Chapter1 整個包,所以按照我們定的別名 c ,直接調(diào)用方法即可使用!
總結(jié)
到此這篇關(guān)于Go導(dǎo)入不同目錄下包報錯的解決方法的文章就介紹到這了,更多相關(guān)Go導(dǎo)入不同目錄包報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- go語言import報錯處理圖文詳解
- Go語言將string解析為time.Time時兩種常見報錯
- 解決MySQL報錯:The last packet sent successfully to the server was 0 milliseconds ago.
- go?mod?tidy報錯解決方法詳解
- go引入自建包名報錯:package?XXX?is?not?in?std解決辦法
- goland安裝1.7版本報錯Unpacked?SDK?is?corrupted解決
- Django-Xadmin后臺首頁添加小組件報錯的解決方案
- Django報錯TemplateDoesNotExist的問題及解決
- 在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found)
- 解決MongoDB?位置查詢報錯planner?returned?error:?unable?to?find?index?for?$geoNear?query的問題
- django報錯設(shè)置auth User的解決
- 解決Oracle?DISTINCT?報錯?inconsistent?datatypes:?expected?-?got?CLOB(數(shù)據(jù)類型不一致:?應(yīng)為?-,?但卻獲得?CLOB)的問題
- Java中報錯org.springframework.jdbc.UncategorizedSQLException的多種解決方法
- 執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory
- 解決MongoDB6.0報錯:"mongo"不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件
- maven報錯:Failed to execute goal on project問題及解決
- Mongodb啟動報錯完美解決方案:about to fork child process,waiting until server is ready for connections.
- golang中package?is?not?in?GOROOT報錯的真正解決辦法
- Go語言報錯:'godoc'?不是內(nèi)部或外部命令,也不是可運行的程序(godoc無法使用處理)解決方法
相關(guān)文章
Go標準庫http?server的優(yōu)雅關(guān)閉深入理解
這篇文章主要為大家介紹了Go標準庫http?server的優(yōu)雅有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪關(guān)閉深入理解2024-01-01
Go語言fmt庫詳解與應(yīng)用實例(格式化輸入輸出功能)
fmt庫是Go語言中一個強大而靈活的庫,提供了豐富的格式化輸入輸出功能,通過本文的介紹和實例演示,相信你對fmt庫的使用有了更深的理解,感興趣的朋友一起看看吧2023-10-10
go語言阻塞函數(shù)和非阻塞函數(shù)實現(xiàn)
本文主要介紹了go語言阻塞函數(shù)和非阻塞函數(shù)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Go中string與[]byte高效互轉(zhuǎn)的方法實例
string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09

