To zadanie jest bardzo łatwe z pakietem Golang net / http.
Wszystko, co musisz zrobić, to:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./static")))
http.ListenAndServe(":3000", nil)
}
zakładając, że pliki statyczne znajdują się w folderze o nazwie staticw katalogu głównym projektu.
Jeśli jest w folderze static, będziesz mieć index.htmlwywołanie pliku, http://localhost:3000/co spowoduje renderowanie tego pliku indeksu zamiast wyświetlania wszystkich dostępnych plików.
Dodatkowo wywołanie dowolnego innego pliku w tym folderze (na przykład http://localhost:3000/clients.html) pokaże ten plik, poprawnie wyrenderowany przez przeglądarkę (przynajmniej Chrome, Firefox i Safari :))
UPDATE: wyświetlanie plików z adresu URL innego niż „/”
Jeśli chcesz udostępniać pliki, powiedz z folderu ./publicpod adresem URL: localhost:3000/staticMusisz użyć dodatkowej funkcji : na func StripPrefix(prefix string, h Handler) Handlerprzykład:
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
http.ListenAndServe(":3000", nil)
}
Dzięki temu wszystkie Twoje pliki ./publicsą dostępne podlocalhost:3000/static
Bez http.StripPrefixfunkcji, gdybyś próbował uzyskać dostęp do pliku localhost:3000/static/test.html, serwer szukałby go w./public/static/test.html
Dzieje się tak, ponieważ serwer traktuje cały identyfikator URI jako ścieżkę względną do pliku.
Na szczęście jest to łatwe do rozwiązania dzięki wbudowanej funkcji.
/static/nie jest/static?