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文件系统层次结构标准。

