How do you serve a static html file using a go web server?

后端 未结 4 422
难免孤独
难免孤独 2020-12-04 06:34

How do you serve index.html (or some other static HTML file) using a go web server?

I just want a basic, static HTML file (like an article, for example) which I can

4条回答
  •  一整个雨季
    2020-12-04 06:51

    That task is very easy with Golang net/http package.

    All You need to do is:

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

    assuming that static files are in folder named static in the root directory of the project.

    If it's in folder static, you'll have index.html file calling http://localhost:3000/ which will result in rendering that index file instead of listing all the files availible.

    Additionally, calling any other file in that folder (for example http://localhost:3000/clients.html) will show that file, properly rendered by the browser (at least Chrome, Firefox and Safari :))

    UPDATE: serving files from url different than "/"

    If You want to serve files, say from folder ./public under url: localhost:3000/static You have to use additional function: func StripPrefix(prefix string, h Handler) Handler like this:

    package main
    
    import (
            "net/http"
    )
    
    func main() {
            http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
            http.ListenAndServe(":3000", nil)
    }
    

    Thanks to that, all your files from ./public are avalible under localhost:3000/static

    Without http.StripPrefix function, if you would try to access file localhost:3000/static/test.html, the server would look for it in ./public/static/test.html

    This is because the server treats the whole URI as a relative path to the file.

    Fortunately, it's easily solved with the built-in function.

提交回复
热议问题