Jestem trochę zdezorientowany. Wiele przykładów pokazuje użycie obu: http.ServeFile(..)
i http.FileServer(..)
, ale wydaje się, że mają bardzo zbliżoną funkcjonalność. Również nie znalazłem żadnych informacji o tym, jak ustawić niestandardową obsługę NotFound.Golang. Co używać? http.ServeFile (..) lub http.FileServer (..)?
// This works and strip "/static/" fragment from path
fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
// This works too, but "/static2/" fragment remains and need to be striped manually
http.HandleFunc("/static2/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, r.URL.Path[1:])
})
http.ListenAndServe(":8080", nil)
Próbowałem odczytać kodu źródłowego i oba z nich korzystać serveFile(ResponseWriter, *Request, FileSystem, string, bool)
podstawową funkcję. Jednak http.FileServer
zwraca fileHandler
za pomocą własnej metody ServeHTTP()
i wykonuje pewne prace przygotowawcze przed udostępnieniem pliku (np. Path.Clean()).
Po co więc ta separacja? Którą metodę lepiej zastosować? I jak mogę ustawić niestandardową obsługę NotFound, na przykład, gdy żądany plik nie zostanie znaleziony?
Największą różnicą jest to, że 'http.FileServer' to' http.Handler', podczas gdy 'http.ServeFile' nie jest. –
Dzięki, wiem o tym, ale to nie sprawia, że sytuacja jest dla mnie lepsza) –