Я обновил свою локальную Go версию с 1.13
до 1.14
, а затем обновил проект, над которым работал, с помощью повторной инициализации, используя go mod
.
Локально:
$ go version
go version go1.14 linux/amd64
go.mod
моего проекта:
module example-project
go 1.14
Произошло обновление в пакете mime
в Go 1.14 , которое изменяет тип по умолчанию: .js
файлы от application/javascript
до text/javascript
.
У меня есть приложение, которое обслуживает папку с файлом JavaScript, например:
func main() {
http.HandleFunc("/static/", StaticHandler)
http.ListenAndServe(":3000", nil)
}
func StaticHandler(w http.ResponseWriter, r *http.Request) {
fs := http.StripPrefix("/static", http.FileServer(http.Dir("public/")))
fs.ServeHTTP(w, r)
}
Я обновил тест случай, чтобы отразить изменения MIME в Go 1.14:
func TestStaticHandlerServeJS(t *testing.T) {
req, err := http.NewRequest("GET", "/static/index.js", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
handler := http.HandlerFunc(StaticHandler)
handler.ServeHTTP(rr, req)
if status := rr.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v",
status, http.StatusOK)
}
expected := "text/javascript; charset=utf-8"
if rr.Header().Get("Content-Type") != expected {
t.Errorf("handler returned unexpected Content-Type: got %v want %v",
rr.Header().Get("Content-Type"), expected)
}
}
Когда я запускаю это локально, тестовый пример, который проверяет Content-Type, терпит неудачу:
TestStaticHandlerServeJS: main_test.go:27: handler returned unexpected Content-Type: got application/javascript want text/javascript; charset=utf-8
Я также могу подтвердите в браузере, что файл действительно обслуживается MIME-типом «application / javascript», как это было в Go 1.13.
Когда я запускаю этот тест на контейнере Docker, используя Официальное golang:1.14.0-alpine3.11
изображение, этот тест проходит, и он отражает измененное поведение пакета mime
.
Так что в результате я остаюсь с тестовый пример, который не проходит локально и передает контейнер. Я поддерживаю только одну версию Go локально, и это 1.14
, как я показал выше. В чем может быть причина того, что в моей локальной установке Go пакет mime
ведет себя по-другому?