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 static
w katalogu głównym projektu.
Jeśli jest w folderze static
, będziesz mieć index.html
wywoł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 ./public
pod adresem URL: localhost:3000/static
Musisz użyć dodatkowej funkcji : na func StripPrefix(prefix string, h Handler) Handler
przykł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 ./public
są dostępne podlocalhost:3000/static
Bez http.StripPrefix
funkcji, 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
?