访问Go语言官方网站(golang.org/dl/)下载适合Linux系统的最新稳定版本安装包(如go1.21.0.linux-amd64.tar.gz)。使用wget命令下载至Linux系统,再解压至/usr/local目录(需管理员权限):
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
(可选:删除下载的压缩包以节省空间:rm go1.21.0.linux-amd64.tar.gz)
编辑shell配置文件(如~/.bashrc、~/.zshrc,根据使用的shell选择),添加以下内容以设置Go环境变量:
export GOROOT=/usr/local/go # Go安装路径
export GOPATH=$HOME/go # 工作空间路径(存放项目、依赖)
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin # 将Go命令加入系统PATH
保存文件后,运行source ~/.bashrc(或对应配置文件)使更改立即生效。
在终端输入go version,若显示Go的版本信息(如go version go1.21.0 linux/amd64),则说明安装成功。
Go 1.11及以上版本支持模块管理,可避免依赖混乱。在项目目录下初始化模块(将example.com/hello替换为你的项目路径):
go mod init example.com/hello
添加依赖时,使用go get命令(如go get -v github.com/golang/protobuf/protoc-gen-go),模块会自动下载依赖至$GOPATH/pkg/mod目录。
创建项目目录(如~/go/src/hello),编写hello.go文件:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go on Linux!")
}
编译并运行:
cd ~/go/src/hello
go build # 编译生成可执行文件(默认名称为hello)
./hello # 运行程序,输出结果
或直接使用go run hello.go快速运行(无需编译)。
国内访问Go模块仓库较慢,可设置代理加速:
go env -w GOPROXY=https://goproxy.cn,direct # 使用国内代理
go env -w GO111MODULE=on # 开启模块支持
(注:GOPROXY可替换为其他可用代理,如https://mirrors.aliyun.com/goproxy/)。
编译项目生成Linux可执行文件(如myapp):
GOOS=linux GOARCH=amd64 go build -o myapp # 交叉编译(适用于Linux环境)
上传至服务器,赋予执行权限并后台运行:
chmod +x myapp
nohup ./myapp > app.log 2>&1 & # 输出日志至app.log
创建systemd服务文件(如/etc/systemd/system/myapp.service):
[Unit]
Description=My Golang Application
After=network.target
[Service]
ExecStart=/path/to/myapp # 可执行文件路径
Restart=always # 崩溃自动重启
User=your_user # 运行用户(避免使用root)
Group=your_group # 运行组
Environment=PATH=/usr/local/go/bin # 设置环境变量
[Install]
WantedBy=multi-user.target
启动并启用服务:
sudo systemctl start myapp
sudo systemctl enable myapp # 开机自启
查看状态:sudo systemctl status myapp。
编写Dockerfile:
FROM golang:1.21 # 使用官方Go镜像
WORKDIR /app
COPY . . # 复制项目文件至容器
RUN go build -o myapp . # 编译项目
EXPOSE 8080 # 暴露端口(根据项目调整)
CMD ["./myapp"] # 启动命令
构建并运行Docker容器:
docker build -t myapp . # 构建镜像
docker run -p 8080:8080 -d myapp # 映射端口并后台运行
(注:若项目依赖外部资源,需通过-v挂载卷或调整Dockerfile)。