一篇文章教會你如何使用Go語言Modules
前言
go moudules是Go的一個包管理工具,官方提供的,還是比較靠譜的,最低Go版本要求1.11+。
可以理解為Python的虛擬環(huán)境,或者Java的maven,PHP的composer。
其本質(zhì)解決的問題就是包管理混亂問題。
反正就是,用就完事了,只有好事,沒有壞事。
配置(不用管)
- GO111MODULE=off # 不適用modules功能
- GO111MODULE=off #使用molules功能,不會去GOPATH下找依賴包, 1.11+版本默認(rèn)開啟
- GO111MODULE=auto:Golang # Golang自己簡則是不是使用modules功能
根據(jù)上述命令,可以得到結(jié)論,在1.11+版本中,默認(rèn)就是可以使用go modules的,不需要做其他設(shè)置。
它和傳統(tǒng)的直接go get區(qū)別在哪
沒有使用go modules時,我們直接go get下載的包,會默認(rèn)放在%GOPATH%/src目錄下。
啟用go modules后,包都會下載到%GOPATH%/pkg/mod文件夾中。
并且會帶版本號,基本徹底解決依賴問題。
開始使用
創(chuàng)建go.mod文件
go.mod文件相當(dāng)于requirement.txt文件,里面會放一些所需要的依賴包。
開始使用
我創(chuàng)建了一個gomod-demo文件夾。
并且CMD進入此文件夾里面。
執(zhí)行命令go mod init gomod-demo。
后面這個gomod-demo可以隨便寫,建議和文件夾名字一樣。
成功后,文件夾下會多了一個go.mod文件,代表成功。
我用Goland打開這個gomod-demo文件夾。
go.mod文件說明
- module:模塊名稱。
- require:依賴包列表以及版本。
- exclude:禁止依賴包列表(僅在當(dāng)前模塊為主模塊時生效)。
- replace:替換依賴包列表(僅在當(dāng)前模塊為主模塊時生效)。
當(dāng)然,這些基本我們不需要動,都是通過命令或者IDE修改的。
簡單使用
比如我需要使用一個xstrings 包。
github地址:https://github.com/huandu/xstrings。
需要執(zhí)行此命令安裝此包。
執(zhí)行下載命令。
go.mod文件會自動添加一個依賴包。
代碼:
- package main
- import (
- "fmt"
- "github.com/huandu/xstrings"
- )
- func main() {
- s := "heheh ADSL附近"
- center := xstrings.Count(s, "h")
- fmt.Println(center)
- }
go連接Mysql
github文檔如下。
執(zhí)行下載命令 go get -u github.com/go-sql-driver/mysql
go.mod文件如下。
代碼:
- package main
- import (
- "database/sql"
- _ "github.com/go-sql-driver/mysql"
- "time"
- )
- func main() {
- //s := "heheh ADSL附近"
- //center := xstrings.Count(s, "h")
- //fmt.Println(center)
- db, err := sql.Open("mysql", "user:password@/dbname")
- if err != nil {
- panic(err)
- }
- // See "Important settings" section.
- db.SetConnMaxLifetime(time.Minute * 3)
- db.SetMaxOpenConns(10)
- db.SetMaxIdleConns(10)
- }
可能出現(xiàn)的異常
如果使用go get 第三方包時,goland無法導(dǎo)入,或者報錯,或者沒有Go Modules。
在項目目錄下,使用go mod download下載一下,基本可以解決問題,只要有Go Modules,就代表沒問題。
如果還是沒有Go Modules,在Goland中settings->Go->GoModules(vgo)
go mod所有命令
- 在當(dāng)前文件夾下初始化一個新的 module,創(chuàng)建 go.mod 文件:go mod init name
- 拉取缺少的模塊,移除不用的模塊:go mod tidy
- 將依賴復(fù)制到 vendor 下:go mod vendor
- 下載依賴:go mod download
- 檢驗依賴:go mod verify
- 顯示模塊依賴圖:go mod graph
- 解釋為什么需要依賴:go mod why
- 編輯 go.mod 文件:go eidt
- 查看命令列表:go mod
- 查看命令幫助文檔:go help mod
總結(jié)
上述我們學(xué)習(xí)了go mod的如何使用。如果在操作過程中有任務(wù)問題,記得下面討論區(qū)留言,我們看到會第一時間解決問題。