使用了go 1.14.2. 版本, 再也不用建src, pkg, bin 目錄了, 以及再也不用強制配置GOPATH了
前提條件:
必須是 go mod 項目.
在工程目錄下, 執行這樣的命令生成一個mod文件
go mod init example.com/user/hello
最新的項目結構:
這個工程是建立再本地磁盤的任意地方的.
vscode調試工程配置: launch.json
{ // 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。 // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}", "env": {}, "args": [] } ] }
go.mod 文件:
module example.com/user/hello go 1.14 require github.com/google/go-cmp v0.4.0
非調試模式運行項目:
在工程根目錄下新建一個run.sh文件,內容如下:
#/bin/bash
projectPath=$(cd `dirname $0`; pwd)
cd $projectPath
module=`go list -m`
projectName=`basename ${module}`
export GOBIN=$projectPath
go install
echo "工程目錄:" $projectPath
echo "執行文件:" $projectPath/$projectName
echo
./$projectName
支持Windows的版本: run.bat
@echo off chcp 65001 set projectPath=%~dp0 set GOBIN=%projectPath% cd /d %projectPath% REM 獲取模塊名 for /F %%i in ('go list -m') do ( set module=%%i) REM 獲取生成的二進制文件名 set lj=%module% set "lj=%lj:/= %" for %%i in (%lj%) do set binFileName=%%i echo "工程目錄:" %projectPath% echo "執行文件:" %projectPath%/%binFileName% go install %binFileName%
在任意地方都可以跑這個項目了:
運行示例1:在非項目下執行
運行示例2: 直接在項目目錄下執行
輸出的二進制文件名是module名 最后一個斜杠后面的字符串. 可以不用加路徑.
如go mod init hello 那么輸出的二進制文件是hello
如go mod init gitlab.com/dzq/hello 那么輸出的二進制文件也是hello
模塊名可以和項目目錄名不一致, 但是建議 模塊名和目錄名一致, 方便理解.
在項目目錄 go import 的字符串 應該是 模塊名加上包名, 不是項目目錄加上包名
對應的go.mod文件:
新版本省了很多事情, 再也不擔心因為環境問題,報錯了.