Я написал простой сервер изображений HTTP:
перейти / SRC / demo / demo.go:
package main
import (
"net/http"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.HandleFunc("/foobar", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "/home/foobar/test.jpg")
})
http.ListenAndServe(":5000", router)
}
Компилирую (PWD = $ HOME / go / src / demo):
GOPATH=$PWD/../../ go build -o demo
И запускаем:
./demo
Затем в Chrome я открываю URL-адрес. Образ поврежден - перезагрузка каждый раз приводит к разным повреждениям, иногда это нормально. Изображения большего размера (~ 200 КБ) выходят из строя чаще, изображения меньшего размера (~ 20 КБ) - реже.
Дополнительные детали:
go version
производит go version go1.9.5 linux/arm64
.
На моем Macbook это не вызывает проблем - возникает только на arm64 (похоже, ResponseWriter не выполняет промывку). Я в недоумении. Любые идеи?
Похоже, это проблема с выпуском go1.9.5. Обновлен набор инструментов до версии go1.10.1, и проблема исчезла.
На какой архитектуре и устройстве вы тестировали? Приведенный выше код (даже с использованием http.NewServeMux()
вместо gorilla) при компиляции с dl.google.com/go/go1.10.1.linux-arm64.tar.gz работает, как ожидалось, но при компиляции с dl.google.com/go/go1.9.5.linux-arm64.tar.gz демонстрирует описанное выше повреждение.
Debian stretch, контейнерный. Работает без проблем.
Я имею в виду архитектуру, например, вы работаете на arm64 (не amd64)? Я подозреваю, что это влияет только на arm64.
С выпуском 1.9.5 проблем нет. Протестировано и работает (без внешних библиотек). Может в этом и проблема, но не уходи.