在Ubuntu上打包Golang应用前,需先安装Go编译器。推荐通过系统包管理器安装(简单便捷):
sudo apt update && sudo apt install golang-go -y
安装完成后,通过go version命令验证是否成功(显示Go版本信息即为成功)。
~/projects)创建项目文件夹,并进入该目录:mkdir -p ~/projects/myapp && cd ~/projects/myapp
main.go文件(入口文件),编写简单Go程序(如打印“Hello, World!”):package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
go.mod文件):go mod init myapp
在项目目录下,使用go build命令编译代码:
myapp):go build
-o参数指定输出文件名(如myapp.bin):go build -o myapp.bin
-ldflags参数去除调试信息,减小文件体积(适用于生产环境):go build -ldflags="-s -w" -o myapp
其中,-s省略符号表,-w省略DWARF调试信息。若需为其他操作系统(如Windows、macOS)或架构(如ARM)打包,可使用交叉编译:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o myapp.exe
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o myapp
注:CGO_ENABLED=0表示禁用CGo(避免依赖C库),确保生成静态链接的可执行文件。tar命令将可执行文件打包为.tar.gz(减少传输体积):tar -czvf myapp.tar.gz myapp
scp将压缩包传输到目标服务器,解压后赋予执行权限并运行:scp myapp.tar.gz user@remote-server:/tmp
ssh user@remote-server
cd /tmp && tar -xzvf myapp.tar.gz
chmod +x myapp
./myapp
若需将应用打包为Docker镜像(便于跨环境运行),可按以下步骤操作:
Dockerfile,内容如下:# 使用官方Go镜像作为构建环境
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .
# 使用scratch作为最终镜像(无操作系统,体积更小)
FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]
docker build -t myapp:latest .
docker run --rm myapp:latest
输出“Hello, World!”即表示成功。以上步骤覆盖了Ubuntu环境下Golang打包的全流程,可根据实际需求选择本地编译、跨平台编译或容器化打包。