一尘不染

你如何使用 go web 服务器提供静态 html 文件?

go

你如何使用 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)
}

阅读 277

收藏
2021-12-02

共1个答案

一尘不染

使用 Golang net/http 包,这项任务非常容易。

您需要做的就是:

package main

import (
        "net/http"
)

func main() {
        http.Handle("/", http.FileServer(http.Dir("./static")))
        http.ListenAndServe(":3000", nil)
}

假设静态文件位于static项目根目录中命名的文件夹中。

如果它在文件夹中static,您将进行index.html文件调用http://localhost:3000/,这将导致呈现该索引文件,而不是列出所有可用的文件。

此外,调用该文件夹中的任何其他文件(例如http://localhost:3000/clients.html)将显示该文件,由浏览器正确呈现(至少是 Chrome、Firefox 和 Safari :))

更新:从不同于“/”的 url 提供文件

如果您想提供文件,请从./publicurl 下的文件夹中说: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

这是因为服务器将整个 URI 视为文件的相对路径。

幸运的是,它可以通过内置函数轻松解决。

2021-12-02