在CentOS上打包Golang项目前,需先安装Golang。可通过以下两种方式安装:
sudo yum install -y golang
wget https://golang.org/dl/go1.23.0.linux-amd64.tar.gz # 替换为最新版本
sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
~/.bashrc(或/etc/profile),添加以下内容:export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
生效配置:source ~/.bashrc
go version # 应输出类似"go1.23.0 linux/amd64"
在$GOPATH/src目录下创建项目文件夹(如myapp),编写main.go文件:
mkdir -p $GOPATH/src/myapp
cd $GOPATH/src/myapp
vim main.go # 示例代码:package main; import "fmt"; func main() { fmt.Println("Hello, CentOS!") }
go mod init example.com/myapp
go get -u github.com/gin-gonic/gin # 示例:添加Gin框架依赖
go build生成可执行文件:cd $GOPATH/src/myapp
go build -o myapp # 生成名为"myapp"的可执行文件
GOOS(目标系统)和GOARCH(目标架构):GOOS=windows GOARCH=amd64 go build -o myapp.exe # 编译为Windows 64位可执行文件
-ldflags和CGO_ENABLED=0:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o myapp
其中:
-ldflags="-s -w":去除调试信息和符号表,减小文件体积;CGO_ENABLED=0:禁用CGO,强制静态编译。将可执行文件与配置文件(如config.yaml)、脚本(如run.sh)等一起打包成压缩文件:
cd $GOPATH/src/myapp
tar -czvf myapp.tar.gz myapp config/ scripts/run.sh # 打包myapp及config、scripts目录
run.sh脚本(用于启动程序):#!/bin/bash
nohup ./myapp > app.log 2>&1 & # 后台运行并输出日志到app.log
chmod +x run.sh # 赋予执行权限
若需将项目打包为RPM格式(适用于CentOS的软件包管理),需完成以下步骤:
sudo yum install -y rpm-build
.rpmmacros,定义构建路径:echo '%_topdir %(echo $HOME)/rpmbuild' >> ~/.rpmmacros
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
~/rpmbuild/SPECS下创建myapp.spec,内容如下:Name: myapp
Version: 1.0
Release: 1%{?dist}
Summary: A simple Golang application for CentOS
License: MIT
URL: http://example.com/myapp
Source0: %{name}-%{version}.tar.gz # 需将项目打包为tar.gz并放入SOURCES目录
BuildRequires: golang >= 1.16
Requires: golang >= 1.16
%description
This is a Golang application packaged for CentOS.
%prep
%setup -q
%build
go build -o %{buildroot}/usr/bin/myapp .
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/bin
cp myapp %{buildroot}/usr/bin/
%files
/usr/bin/myapp
%changelog
* Tue Oct 28 2025 Your Name <your@email.com> - 1.0-1
- Initial package
~/rpmbuild/SOURCES:tar -czvf ~/rpmbuild/SOURCES/myapp-1.0.tar.gz -C $GOPATH/src/myapp .
运行rpmbuild命令:rpmbuild -ba ~/rpmbuild/SPECS/myapp.spec
生成的RPM包位于~/rpmbuild/RPMS/x86_64/目录下(如myapp-1.0-1.el7.x86_64.rpm)。scp将打包文件上传到CentOS服务器:scp myapp.tar.gz user@your_server_ip:/opt
ssh user@your_server_ip
cd /opt
tar -xzvf myapp.tar.gz
cd /opt/myapp
chmod +x myapp
./myapp # 前台运行
nohup或systemd服务:nohup ./myapp > app.log 2>&1 & # 日志输出到app.log
/etc/systemd/system/myapp.service:[Unit]
Description=My Golang Application
After=network.target
[Service]
User=root
ExecStart=/opt/myapp/myapp
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动服务:sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
以上步骤覆盖了Golang在CentOS上的完整打包、部署流程,可根据实际需求选择静态编译、RPM打包或Docker容器化等方式优化部署效率。