Go构建和发布
Go Build
减小发布包体积
在我的项目构建中,大约小5M左右
go build -ldflags '-s -w'
go tool link
-s
disable symbol tablego tool nm
不可用
-w
disable DWARF generation- gdb调试不可用
- pprof不可用
使用embed内嵌文件
- 支持string、byte数组、FS三种类型
- embed.FS 可使用
.ReadFile("static/index.html")
读取字节数组
package main
import _ "embed"
//go:embed version.txt
var version string
var versionByte []byte
// 此处通常处理文件夹
//go:embed static
var embededFiles embed.FS
出错时去掉文件路径
go build -trimpath
go help build
-trimpath
remove all file system paths from the resulting executable.
Instead of absolute file system paths, the recorded file names
will begin either a module path@version (when using modules),
or a plain import path (when using the standard library, or GOPATH).
构建时指定
-X
的使用:
flags="-X 'main.goversion=$(go version)'"
go build -ldflags "$flags" -x main.go
./main -v
go mod
go mod tidy
自动下载依赖,并放到cache
# 任何导致依赖关系变化的构建会失败(因为build会自动更新依赖)
go build -mod=readonly
# 使用vendor版本构建
go build -mod=vendor
GoReleaser自动打包
安装和使用
go install github.com/goreleaser/goreleaser@latest
goreleaser init
定制话配置文件
.goreleaser.yaml
before:
hooks:
# You may remove this if you don't use go modules.
- go mod tidy
builds:
- main: ./hrp/cmd/cli/main.go
env:
- CGO_ENABLED=0
goos:
- linux
- windows
goarch:
- amd64
flags: -trimpath
archives:
- format: binary
构建
goreleaser release --snapshot --rm-dist