第一步在終端中使用go mod
export GO111MODULE=auto
mkdir -p /xxx/script/Batchdeployment/api
mkdir -p /xxx/script/Batchdeployment/package
# gopath 不要和項目目錄有父子關係
echo $GOPATH
/xxx/script/Batchdeployment/package
cd /xxx/script/Batchdeployment/api
go mod init api
# script目錄是vscode 工作空間的目錄之一
# Batchdeployment 是項目目錄
最終項目結構如下
GO111MODULE 有三個值:off, on和auto(默認值)
GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找。
GO111MODULE=on,go命令行會使用modules,而一點也不會去GOPATH目錄下查找。
GO111MODULE=auto,默認值,go命令行將會根據當前目錄來決定是否啓用module功能。這種情況下可以分爲兩種情形:
- 當前目錄在GOPATH/src之外且該目錄包含go.mod文件
當前文件在包含go.mod文件的目錄下面
___main.go 之中的代碼如下
package main
import (
"fmt"
add "api/add"
"github.com/labstack/echo"
)
func main() {
res := add.AddData()
e := echo.New()
fmt.Println(e)
fmt.Println(res)
}
- sum.go中的代碼如下
package add
// addData 計算兩數只和
func AddData() int {
return 3 + 4
}
在api目錄下面執行 go run main.go, go mod 會自動安裝依賴到 $GOPATH 的 pkg目錄下面
第二步在VS Code 中使用 go mod
在vscode 的script 目錄下面新建 .vscode 目錄,裏面包含setting.json 和 launch.json,內容如下
setting.json
{
"code-runner.executorMap": {
"go": "go run",
"go.gopath": "/xxx/script/Batchdeployment/package",
"go.toolsGopath": "/xxx/script/Batchdeployment/package"
},
"code-runner.cwd": "/xxx/script/Batchdeployment/api",
"go.toolsGopath": "/xxx/script/Batchdeployment/package",
"go.inferGopath": false,
"go.gopath": "/xxx/script/Batchdeployment/package"
}
launch.json
{
"code-runner.executorMap": {
"go": "go run",
"go.gopath": "/xxx/script/Batchdeployment/package",
"go.toolsGopath": "/xxx/script/Batchdeployment/package"
},
"code-runner.cwd": "/xxx/script/Batchdeployment/api",
"go.toolsGopath": "/xxx/script/Batchdeployment/package",
"go.inferGopath": false,
"go.gopath": "/xxx/script/Batchdeployment/package"
}
code-runner.cwd : 是code-runner插件的配置,設置當前的項目目錄 只和可以直接右鍵運行項目
go.toolsGopath: GOPATH for installing the Go tools using go.toolsGopath,簡單說就是安裝調試工具的目錄,如果沒有或者不存在默認安裝 GOPATH,不過會造成 GOPATH 的目錄雜亂
go.inferGopath: 如果會true,它會在當面目錄向上級目錄搜索src,並將src的上級目錄設置爲 GOPATH,反之亦然。此設置在處理具有不同gopath的不同Go項目時非常有用。