确保Ubuntu系统已安装Go语言环境,推荐使用最新稳定版本(如Go 1.20+)。安装步骤包括:
sudo apt update;sudo apt install -y build-essential golang git;{GO_VERSION}为实际版本,如1.20.5):wget https://golang.org/dl/go{GO_VERSION}.linux-amd64.tar.gz,sudo tar -C /usr/local -xzf go{GO_VERSION}.linux-amd64.tar.gz;~/.profile或~/.bashrc,添加export GOROOT=/usr/local/go、export GOPATH=$HOME/go、export PATH=$PATH:$GOROOT/bin:$GOPATH/bin,然后执行source ~/.profile使设置生效;go version应显示Go版本信息。从Go 1.11开始,推荐使用Go Modules管理项目依赖,避免依赖冲突。操作步骤:
go mod init <module-name>(如go mod init myproject);go get -u <package-path>安装所需依赖(如go get -u github.com/gin-gonic/gin);go mod tidy会自动移除未使用的依赖并添加缺失的依赖。CGO_ENABLED=0禁用CGO(避免依赖C库),生成纯静态二进制文件,提升可移植性。命令示例:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go;upx工具进一步压缩二进制文件(需提前安装:sudo apt install upx),命令:upx --best myapp(--best表示最高压缩率)。通过GOOS(目标操作系统)和GOARCH(目标架构)环境变量实现跨平台编译。常见组合示例:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go;GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go;GOOS=darwin GOARCH=arm64 go build -o myapp-darwin main.go。m := make(map[string]int)),避免向nil map添加元素导致panic;value, ok := map[key]检查key是否存在,而非直接判断value == "";[]byte(如xBytes := []byte(x); xBytes[0] = 'T'; x = string(xBytes));float64,若需保留整数类型,可自定义类型并实现json.Marshaler/json.Unmarshaler接口。Makefile或Shell脚本简化编译流程。例如Makefile示例:BUILD_ENV := CGO_ENABLED=0 GOOS=linux GOARCH=amd64
all: build
build:
$(BUILD_ENV) go build -o bin/myapp main.go
clean:
rm -f bin/myapp
运行make build即可自动编译;FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp .
FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]
构建镜像:docker build -t myapp,运行容器:docker run -p 8080:8080 myapp。编译完成后,需为二进制文件设置执行权限:chmod +x myapp;
上传至目标服务器后,通过./myapp运行并验证功能是否正常,检查是否有依赖缺失或权限问题。