#!/usr/bin/env bash set -e uname_s=`uname -s | awk '{print tolower($0)}'` uname_m=`uname -m` timeTag="-X 'main.BuildTime=$(date '+%Y-%m-%d %H:%M:%S')'" branchFlag="-X main.GitBranch=$(git name-rev --name-only HEAD)" commitFlag="-X main.CommitId=$(git rev-parse --short HEAD)" goVersion=`go version | awk '{print $3}'` goVersionFlag="-X 'main.GoVersion=${goVersion}'" staticTag="-extldflags '-static'" #关闭符号链接 ldflags="-s -w ${staticTag} ${timeTag} ${branchFlag} ${commitFlag} ${goVersionFlag} " CGO_ENABLED=0 GOOS=${uname_s} GOARCH=amd64 go build -ldflags "${ldflags}" -o app main.go
shell 字符串小写转大写
uname -s | awk '{print tolower($0)}'
shell字符串拼接
对于变量或者字符串的连接,shell提供了相当简单的做法
直接放到一起或用双引号即可
${staticTag} ${timeTag} ${branchFlag} ${commitFlag} ${goVersionFlag}
golang 编译时加入额外信息
golang中我们在编译时可以使用-ldflags
编译选项来添加一些信息,这些信息会被写入到目标文件中
交叉编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它