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

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

}


HUX布斯
浏览 255回答 3
3回答

肥皂起泡泡

我更喜欢http.ServeFile为此使用http.FileServer. 我想要禁用目录浏览,如果文件丢失,则正确的 404 以及一种特殊情况下索引文件的简单方法。这样,您只需将构建的二进制文件放到一个文件夹中,它就会提供与该二进制文件相关的所有内容。当然,如果您将文件存储在另一个目录中strings.Replace,p则可以使用on 。func main() {    fmt.Println("Now Listening on 80")    http.HandleFunc("/", serveFiles)    log.Fatal(http.ListenAndServe(":80", nil))}func serveFiles(w http.ResponseWriter, r *http.Request) {    fmt.Println(r.URL.Path)    p := "." + r.URL.Path    if p == "./" {        p = "./static/index.html"    }    http.ServeFile(w, r, p)}

森林海

使用 Golang net/http 包,这项任务非常容易。您需要做的就是:package mainimport (        "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 mainimport (        "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 视为文件的相对路径。幸运的是,它可以通过内置函数轻松解决。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go