电脑配置:Windows 10 编译工具:vscode
Go:https://go.dev/dl/ (选择 Windows 安装包)
步骤:
用 vscode 打开项目文件夹,输入 go env,查看环境配置
PS D:\Project> go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\AppData\Local\go-build
set GOENV=C:\Users\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.23.3
set GODEBUG=
set GOTELEMETRY=local
set GOTELEMETRYDIR=C:\Users\AppData\Roaming\go\telemetry
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=D:\Project\go.mod
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\AppData\Local\Temp\go-build174039056=/tmp/go-build -gno-record-gcc-switches
根据显示的环境配置,一般只要设置 GOARCH GOOS GOPROXY CGO_ENABLED
GOARCH:架构选择,x86 为 "386", x64 为 "amd64"
GOOS:机器选择,macOS 为 "darwin",Windows 为 "windows"
GOPROXY: 代理配置,Go 在安装时会下载相关库,有了代理可以更快的下载
CGO_ENABLED:用来控制 golang 编译期间是否支持调用 cgo 命令的开关,true 为支持
在 Windows 上会自动配置 GOARCH GOOS,其余的两个环境变量,可以通过下面的命令来实现:
go env -w GOPROXY=https://goproxy.cn,direct
go env -w CGO_ENABLED = 1
// 或者
$env:CGO_ENABLED = 1
如果项目还涉及到其他库的 dll 调用,则还需要安装 gcc 工具
在 Windows 上下载安装 MING64,打开 MING64 命令行窗口输入下面命令安装 gcc
$ pacman -S gcc
注意要在电脑的环境变量添加 MINGW64 的路径,以保证 go 编译时能找到 gcc
完成这些,在 vscode 的 powershell 终端输入下面命令来刷新系统环境变量和显示当前系统环境变量
$env:Path = [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine)
$env:Path
上述操作都完成之后,一般就没问题了,输入命令来编译出不含命令行窗口的纯 GUI 的 exe 程序
go build -ldflags "-H windowsgui"
如果需要为可执行程序添加自定义图标的话,则需要先将图标文件打包成 .syso
文件,有了该文件后,Go 编译器会在编译时自动包含 .syso
文件的内容
go generatersrc -o main.syso -ico main.icogo build -ldflags "-H windowsgui"
重新编译的话,建议先 go clean 再 build