【发布时间】:2021-07-07 05:26:46
【问题描述】:
我在 Go 中有一个简单的 Web 服务器,如下所示:
func webServerWay() {
r := mux.NewRouter()
//File Upload Code
r.HandleFunc("/upload", uploadFile).Methods("POST")
//Test Message
r.HandleFunc("/test", test).Methods("GET")
r.PathPrefix("/site/").Handler(http.StripPrefix("/site/", http.FileServer(http.Dir("site"))))
if err := http.ListenAndServe(":8010", r); err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
简单的测试函数如下所示:这是一个简单的函数来查看端点是否可达。
func test(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome it Works!")
}
网站结构是:
├── go.mod
├── go.sum
├── main.go
└── site
├── dist
└── index.html
该应用程序在我的本地开发环境(即 Mac OS)中完美运行:
Ajay@apples-MacBook-Air:/$ curl localhost:8010/test
Welcome it Works!
Ajay@apples-MacBook-Air:/$ curl localhost:8010/site/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>gAnalytics</title>
</head>
<body>
<div id="root"></div>
</body>
<script defer src="./dist/appXYZ.min.js"></script></head>
</html>
但是当我为 Linux(Ubuntu 20.04)x64 创建构建时
GOOS=linux GOARCH=386 go build -o gApp24v1.linux main.go
并在 Linux 中运行代码:
sudo ./gApp24v1.linux
静态站点服务不起作用,但我可以到达测试端点:
root@gapp24:/home/ajay/app# curl localhost:8010/test
Welcome it Works!
root@gapp24:/home/ajay/app# curl localhost:8010/site/
404 page not found
我在静态文件处理程序中尝试了多种代码方式,查看其他答案并阅读文档,但它适用于我的 macOS 而不是我的 Linux 机器。
任何建议!
我的 Linux(Ubuntu 机器)中的 netstat 如下:
root@gapp24:/home/ajay/app# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 671/vsftpd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 547/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 704/sshd: /usr/sbin
tcp6 0 0 :::8010 :::* LISTEN 1167/./gApp24v1.lin
tcp6 0 0 :::22 :::* LISTEN 704/sshd: /usr/sbin
【问题讨论】:
-
你的静态文件是否包含在linux的正确目录中?它是否在您似乎从中运行二进制文件的
/home/ajay/app目录中? -
嘿@WishwaPerera:随着构建工作移动静态站点目录!但是当我移动构建文件(使用
go build main.go=>结果到main构建文件)我的本地计算机时,只需在没有站点目录的./main的任何文件夹中提供构建文件,我仍然可以让服务器运行适当地?但在其他操作系统中,我需要使用 go build 文件移动静态站点!这与GOPATH有关吗?但是我的 GOPATH 不包括我当前的项目目录?