方式1:使用 GOPATH 和 GOROOT
在 goland 中打開:Settings - Go,會看到 GOROOT、GOPATH,其相關解釋與配置如下:
- GOROOT:對應 go 的安裝路徑,例如:D:\go\bin
- GOPATH:是我們的工作空間,保存 go 代碼和第三方依賴包
GOPATH可以設置多個,其中,第一個將會是默認的包目錄,使用 go get 下載的包都會在第一個 path 中的 src 目錄下,使用 go install 時,在哪個GOPATH中找到了這個包,就會在哪個GOPATH下的bin目錄生成可執行文件。
使用GOPATH時,Go會在以下為目錄中搜索包:
- GOROOT/src:Go標準庫
- GOPATH/src:應用自身代碼和第三方依賴的代碼
引入包時,路徑從 src 的下一級文件地址開始寫,編譯器會自動從 src 下開始引入,如下:
// 自定義包的絕對路徑為:D:\learing\goproject\src\gocode\testproject001\model
import ("fmt""gocode/testproject001/model"
)
在使用方式一導入自定義包時,報錯如下:
main.go:5:2: package gocode/testproject001/model is not in std (D:\go\src\gocode\testproject001\model)
注意:該方式易出錯,不建議使用
方式2:使用 go.mod
從 Go1.11 版本之后,已經不再推薦使用 GOPATH ,而是使用 GOMODULE 來管理程序文件。
查看項目的 go 配置
首先在終端下進入到項目目錄,執行 go env 查看 go 的相關配置,具體如下:
D:\learing\goproject\src\gocode\testproject001\main>go envset GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\heliubei\AppData\Local\go-build
set GOENV=C:\Users\heliubei\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\learing\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\learing\goproject
set GOPRIVATE=
set GOPROXY=https://goproxy.io,direc
set GOROOT=D:\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=D:\go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.21.3
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\heliubei\AppData\Local\Temp\go-build3874952850=/tmp/go-build -gno-record-gcc-switches
如果 GO111MODULE = off 可通過如下命令進行修改,以確保 GO111MODULE = on
go env -w GO111MODULE = on
GO111MODULE 介紹
GO111MODULE 有三個值:off、on 和 auto,具體介紹如下:
1)GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。
2)GO111MODULE=on,go命令行會使用modules,而一點也不會去GOPATH目錄下查找。
3)GO111MODULE=auto,默認值,go命令行將會根據當前目錄來決定是否啟用module功能。這種情況下可以分為兩種情形:
- 當前目錄在GOPATH/src之外且該目錄包含go.mod文件
- 當前文件在包含go.mod文件的目錄下面
go.mod 使用
1)進入項目路徑下執行 go mod init + 模塊名 命令,在項目文件下創建一個 go.mod 文件,具體如下:
D:\learing\goproject>go mod init goprojectgo: creating new go.mod: module goproject
go: to add module requirements and sums:go mod tidy
我的項目目錄為:D:\learing\goproject
2)引入自定義包時,路徑應從 go.mod 所在的路徑下寫起
package mainimport ("fmt""goproject/src/gocode/testproject001/model"
)func main() {//創建person結構體示例:p := model.NewPerson("麗麗")p.SetAge(20)fmt.Println(p.Name)fmt.Println(p.GetAge())fmt.Println(*p)
}
自定義包的絕對路徑為:D:\learing\goproject\src\gocode\testproject001\model
3)成功導入自定義包