一次正确的配置
結果檔案結構
這是操作完畢後的完整檔案結構樹狀圖,接下來将帶大家一步一步完成它
特别注意!入口檔案
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
建立項目
該項目建立使用goland2020
任選一個檔案夾建立目錄,注意項目的名字最好依照這個格式:
xxx.xxx
點号的字尾随便寫,隻要保證上面這樣的格式就好了
我們建立一個項目
gindemo.com
此時打開 goland 的設定頁面,設定好
GOROOT
GOPATH
設定過程請參考 gin 相關文章!
建立檔案 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 會為我們自動導包,故不會出現飄紅現象!
但實際上
go.mod
内部依然沒有配置依賴,我們需要在項目目錄下打開指令行,輸入
go mod tidy
為我們自動處理好依賴關系;
此時配置好運作參數直接運作 main 方法就可以開啟我們的後端服務了
不同檔案夾下導包
建立檔案(大小寫不是必要的)
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
來分析一下最關鍵的三行内容
- 第一行即 gomod 管理的所在包名稱
- 第二行即 go 版本
- 第三行及剩餘行即導入的依賴
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代表後面導入的内容
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",
})
})
// 在這裡調用 C1.go 檔案内的方法
app.GET("/c1",c.BindDemo)
app.Run(":10086")
}
我們來分析一下 import 裡面這行代碼的含義:
c "gindemo.com/src/Chapter1"
- 小寫字母 c,表示給後面的包取個别名,我們之後直接使用 c 來調用
- 導包絕不可以使用相對路徑,必須要用 go.mod 裡面 module 行給出的路徑打頭,然後依次索引到我們的檔案
- 這裡是直接導入 Chapter1 整個包,也即導入其所擁有的所有 go 檔案
此時你發現 goland 直接飄紅,但這不是我們的問題!直接運作是可以跑起來的!
由于我們直接導入 Chapter1 整個包,是以按照我們定的别名 c ,直接調用方法即可使用!