你如何使用 go web 服务器提供 index.html(或其他一些静态 HTML 文件)?
我只想要一个基本的静态 HTML 文件(例如一篇文章),我可以从 go web 服务器提供它。HTML 应该可以在 go 程序之外修改,就像在使用 HTML 模板时一样。
这是我的 Web 服务器,它只托管硬编码文本(“Hello world!”)。
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":3000", nil) }
使用 Golang net/http 包,这项任务非常容易。
您需要做的就是:
package main import ( "net/http" ) func main() { http.Handle("/", http.FileServer(http.Dir("./static"))) http.ListenAndServe(":3000", nil) }
假设静态文件位于static项目根目录中命名的文件夹中。
static
如果它在文件夹中static,您将进行index.html文件调用http://localhost:3000/,这将导致呈现该索引文件,而不是列出所有可用的文件。
index.html
http://localhost:3000/
此外,调用该文件夹中的任何其他文件(例如http://localhost:3000/clients.html)将显示该文件,由浏览器正确呈现(至少是 Chrome、Firefox 和 Safari :))
http://localhost:3000/clients.html
如果您想提供文件,请从./publicurl 下的文件夹中说:localhost:3000/static您必须使用附加功能:func StripPrefix(prefix string, h Handler) Handler像这样:
./public
localhost:3000/static
func StripPrefix(prefix string, h Handler) Handler
package main import ( "net/http" ) func main() { http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public")))) http.ListenAndServe(":3000", nil) }
多亏了这一点,您的所有文件./public都可以在localhost:3000/static
没有http.StripPrefix功能,如果您尝试访问 file localhost:3000/static/test.html,服务器将在./public/static/test.html
http.StripPrefix
localhost:3000/static/test.html
./public/static/test.html
这是因为服务器将整个 URI 视为文件的相对路径。
幸运的是,它可以通过内置函数轻松解决。