温馨提示×

CentOS编译Go项目步骤

小樊
45
2025-11-14 04:26:55
栏目: 编程语言

在 CentOS 上编译 Go 项目的标准流程


一 准备环境

  • 更新系统并安装基础工具(可选但推荐):
    • sudo yum update -y
    • sudo yum install -y wget git gcc make
  • 安装 Go(两种常用方式,二选一)
    • 使用包管理器安装(CentOS 7/8/Stream 可用):
      • sudo yum install -y golang # CentOS 7
      • sudo dnf install -y golang # CentOS 8/Stream
    • 手动安装官方二进制包(便于指定版本):
      • wget https://golang.org/dl/go1.22.5.linux-amd64.tar.gz
      • sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
  • 配置环境变量(写入 ~/.bashrc 或 /etc/profile,二选一)
    • echo ‘export PATH=$PATH:/usr/local/go/bin’ >> ~/.bashrc
    • source ~/.bashrc
  • 验证安装:go version(应输出版本号,如 go1.22.5)

二 拉取代码与准备依赖

  • 进入项目目录并初始化模块(若项目根目录没有 go.mod):
    • go mod init # 例如:go mod init example.com/mymodule
  • 下载依赖(建议在项目根目录执行):
    • go mod tidy
  • 说明:Go 1.11+ 默认启用 Go Modules,通常无需再设置 GOPATH;如维护老项目可按需设置 GOPATH。

三 本地编译与运行

  • 在项目根目录执行(确保存在 package main 的入口):
    • 编译:go build -o myapp main.go # 生成可执行文件 myapp
    • 运行:./myapp
  • 常用构建参数
    • -o:指定输出文件名或路径
    • -v:打印编译的包名
    • -x:打印执行的命令(便于排错)
    • -race:启用数据竞争检测(仅 amd64 等支持平台)
    • -ldflags:链接期参数,常用 -s -w 减小体积,-X 注入变量
  • 示例(注入版本与构建环境并减小体积)
    • go build -o myapp
      -ldflags “-s -w -X main.Version=1.2.3 -X main.BuildEnv=prod”
      -v ./cmd/myapp

四 交叉编译与产物打包

  • 交叉编译为 Linux amd64(在 macOS/Windows 或另一台 Linux 上构建时常用)
    • GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go
  • 常见目标平台示例
    • Linux amd64:GOOS=linux GOARCH=amd64
    • Windows amd64:GOOS=windows GOARCH=amd64
    • macOS amd64:GOOS=darwin GOARCH=amd64
  • 将可执行文件与配置打包
    • tar -czvf myapp-linux-amd64.tar.gz myapp-linux-amd64 config/ scripts/

五 运行与发布建议

  • 直接运行与后台启动
    • chmod +x myapp
    • nohup ./myapp > app.log 2>&1 &
  • 使用 systemd 托管(推荐用于生产)
    • 创建服务文件:/etc/systemd/system/myapp.service
      • [Unit]
        • Description=My Go Application
        • After=network.target
      • [Service]
        • User=your_user
        • WorkingDirectory=/opt/myapp
        • ExecStart=/opt/myapp/myapp
        • Restart=always
        • Environment=APP_ENV=production
      • [Install]
        • WantedBy=multi-user.target
    • 启用与启动
      • sudo systemctl daemon-reload
      • sudo systemctl enable --now myapp
  • 防火墙放行(如对外提供 80/443)
    • sudo firewall-cmd --permanent --add-service=http
    • sudo firewall-cmd --permanent --add-service=https
    • sudo firewall-cmd --reload

0