Как вы обслуживаете статический html-файл с помощью веб-сервера go?
Как вы служите индекса.html (или какой-либо другой статический HTML-файл) с помощью веб-сервера go?
Мне просто нужен базовый статический HTML-файл (например, статья), который я могу обслуживать с веб-сервера go. HTML должен быть модифицируемым вне программы go, как это было бы в случае использования шаблонов HTML.
Это мой веб-сервер, на котором размещается только жестко закодированный текст ("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)
}
2 ответа:
эта задача очень проста с пакетом Golang net/http.
все, что вам нужно сделать, это:
package main import ( "net/http" ) func main() { http.Handle("/", http.FileServer(http.Dir("./static"))) http.ListenAndServe(":3000", nil) }
предполагая, что статические файлы находятся в папке с именем
static
в корневом каталоге проекта.если это в папке
static
, вы вызовhttp://localhost:3000/
что приведет к визуализации этого индексного файла вместо перечисления всех доступных файлов.кроме того, вызов любого другого файла в этой папке (например
http://localhost:3000/clients.html
) покажет этот файл, правильно отображаемый браузером (по крайней мере Chrome, Firefox и Safari :))обновление: обслуживание файлов с url-адреса, отличного от "/"
если вы хотите обслуживать файлы, скажем, из папки
./public
под url: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
без
не FTP-сервер: это что-то другое, чем то, что я намеревался, что бы служить
index.html
Домашняя страница, как обычный веб-сервер. Например, когда я иду в mydomain.com в моем браузере, я хочуindex.html
вынесено.это в основном то, что "Написание Веб-Приложений " описывает, а какой проект нравится угу (статический генератор html сайта) делает.
речь идет о чтении файл, и ответ с ContentType "text / html":
func (server *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { err := server.renderFile(w, r.URL.Path) if err != nil { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.WriteHeader(http.StatusNotFound) server.fn404(w, r) } }
С
renderFile()
по сути, чтение и установка правильного типа:file, err = ioutil.ReadFile(server.MediaPath + filename) if ext != "" { w.Header().Set("Content-Type", mime.TypeByExtension(ext)) }