部署go项目到linux服务器(简易版)
前提条件:
- 本地已经有go语言的运行环境,可以参考GO语言下载与安装
- 有编辑器(如vscode)
- 有服务器,如阿里云服务器
- 服务器安装了宝塔面板
本地新建项目并运行
新建一个main.go文件
go
package main
import (
"encoding/json"
"log"
"net/http"
"os"
)
type Response struct {
Status string `json:"status"`
Message string `json:"message"`
Data any `json:"data,omitempty"`
}
func main() {
// 设置路由
http.HandleFunc("/", handleRequest)
http.HandleFunc("/api/test", handleTestRequest)
// 获取端口(默认为 8080)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
// 启动服务器
log.Printf("Server starting on :%s...", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
response := Response{
Status: "success",
Message: "Welcome to the test API",
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}
func handleTestRequest(w http.ResponseWriter, r *http.Request) {
var response Response
switch r.Method {
case http.MethodGet:
response = Response{
Status: "success",
Message: "GET request received",
Data: map[string]string{
"method": "GET",
"example": "This is a GET response",
},
}
case http.MethodPost:
var requestData map[string]interface{}
if err := json.NewDecoder(r.Body).Decode(&requestData); err != nil {
response = Response{
Status: "error",
Message: "Invalid JSON payload",
}
w.WriteHeader(http.StatusBadRequest)
} else {
response = Response{
Status: "success",
Message: "POST request received",
Data: map[string]interface{}{
"method": "POST",
"payload": requestData,
},
}
}
default:
response = Response{
Status: "error",
Message: "Method not allowed",
}
w.WriteHeader(http.StatusMethodNotAllowed)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}
本地运行:go run main.go
如果正常打印Server starting on :8080...
,则启动成功
打包项目
为了在linux服务器正常运行项目,我们需要在打包时设置目标为linux
bash
# CMD 命令提示符
set GOOS=linux
set GOARCH=amd64
go build -o myapp-linux main.go
# PowerShell
$env:GOOS = "linux"
$env:GOARCH = "amd64"
go build -o myapp-linux main.go
逐行执行上述命令,即可完成打包,在同级目录输出一个可执行文件myapp-linux
上传到服务器
将可执行文件myapp-linux
上传到服务器的某个目录下,以/www/serverFiles/goServer
为例。然后在宝塔面板中新建一个go服务。
第一步:

第二步:

第三步:

访问接口
在浏览器输入${你上面填的的ip地址或域名} + /api/test
,如果提示{"status":"success","message":"GET request received","data":{"example":"This is a GET response","method":"GET"}}
,则服务启动成功。
遇到的问题
- 如果提示域名绑定失败,域名已被占用,则可以检查一下宝塔面板的本站其他项目,是否用了这个域名。
- 如果部署后访问提示502 bad getway,则检查一下宝塔面板的配置文件中的端口,是不是跟项目里设置的端口一致(本文这个项目是8080)。