Golang中Web服务器的主函数应该放在哪里?

Golang中Web服务器的主函数应该放在哪里? 为了学习Go语言,我编写了许多小型Go可执行程序。现在,我决定将它们中的6个收集到一台VPS上,并“在一个地方托管多个子域名”,以便记录我的工作内容,以备将来之需。每个Go可执行程序都由Nginx进行代理。https://go4webdev.org

一切运行都符合预期,但一些托管专家说我放置可执行文件和文件的位置不对。我使用的是默认的Nginx路径

/var/www/go4webdev/main 以及用于CSS等的子文件夹

https://hosting.go4webdev.org/go

是否有更正确的方式来实现?

1 回复

更多关于Golang中Web服务器的主函数应该放在哪里?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go Web项目中,主函数通常应放在项目根目录的main.go文件中。对于多服务托管,建议采用以下结构:

// cmd/web/main.go
package main

import (
    "log"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", handler)
    
    log.Println("Starting server on :8080")
    err := http.ListenAndServe(":8080", mux)
    if err != nil {
        log.Fatal(err)
    }
}

func handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello from Go Web Server"))
}

项目目录结构示例:

go4webdev/
├── cmd/
│   ├── webapp1/
│   │   └── main.go
│   ├── webapp2/
│   │   └── main.go
│   └── webapp3/
│       └── main.go
├── internal/
│   └── handlers/
├── static/
│   ├── css/
│   └── js/
└── go.mod

Nginx配置应指向编译后的二进制文件:

server {
    listen 80;
    server_name app1.go4webdev.org;
    
    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host;
    }
}

server {
    listen 80;
    server_name app2.go4webdev.org;
    
    location / {
        proxy_pass http://localhost:8082;
        proxy_set_header Host $host;
    }
}

使用systemd管理服务:

# /etc/systemd/system/go4webdev-app1.service
[Unit]
Description=Go4WebDev App1 Service

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/go4webdev
ExecStart=/opt/go4webdev/bin/app1
Restart=always

[Install]
WantedBy=multi-user.target

编译和部署:

# 编译
go build -o bin/app1 cmd/webapp1/main.go

# 设置权限
chown -R www-data:www-data /opt/go4webdev

# 启用服务
systemctl enable go4webdev-app1.service

这种结构将可执行文件放在/opt/go4webdev/bin/目录,静态资源放在/opt/go4webdev/static/,符合Linux文件系统层次结构标准。

回到顶部