diff --git a/main.go b/main.go index 829dea5..e5c166a 100644 --- a/main.go +++ b/main.go @@ -118,38 +118,38 @@ func writeUint64BE(writer io.Writer, num uint64) error { return nil } -func respondWithFile(writer http.ResponseWriter, request *http.Request, filename string) { +func respondWithFile(writer http.ResponseWriter, filename string) { file, err := os.Open(filename) if err != nil { - fmt.Println(" !!! Файл", filename, "не найден!") + writer.WriteHeader(http.StatusInternalServerError) return } stat, err := file.Stat() if err != nil { - fmt.Println(" !!! Не удалось получить информацию о файле", filename + "!") + writer.WriteHeader(http.StatusInternalServerError) + file.Close() return } buffer := make([]byte, stat.Size()) - count, err := file.Read(buffer); + _, err = file.Read(buffer); if err != nil { - fmt.Println(" !!! Не удалось прочитать содержимое файла", filename + "!") + writer.WriteHeader(http.StatusInternalServerError) + file.Close() return } - if int64(count) != stat.Size() { - fmt.Println(" *** Файл", filename, "был прочитан не полностью.") - } writer.Write(buffer) + file.Close() } func handleRootAnd404(writer http.ResponseWriter, request *http.Request) { if request.URL.Path != "/" { writer.WriteHeader(http.StatusNotFound) - respondWithFile(writer, request, "404.html") + respondWithFile(writer, "404.html") } else { - respondWithFile(writer, request, "index.html") + respondWithFile(writer, "index.html") } } @@ -325,12 +325,12 @@ func handleEditPage(writer http.ResponseWriter, request *http.Request) { classesRWMutexes[queryValues["c"][0]].Unlock() } else { - respondWithFile(writer, request, "editpage.html") + respondWithFile(writer, "editpage.html") } } /* TODO: в эту и похожие функции нужно добавть возможность отправить статус 500 */ func handleSchedule(writer http.ResponseWriter, request *http.Request) { - respondWithFile(writer, request, "schedule.html") + respondWithFile(writer, "schedule.html") } /* TODO: возможно стоит отправлять что-то кроме просто ошибки 500 */ @@ -385,6 +385,7 @@ func main() { } classes, err = classesDir.ReadDir(0) + classesDir.Close() if err != nil { fmt.Printf("[!!!]Не удалось прочитать содержимое директории classes.\n") return @@ -400,6 +401,8 @@ func main() { classesNames[i] = classes[i].Name() classesRWMutexes[classes[i].Name()] = new(sync.RWMutex) } + + classes = nil http.HandleFunc("/", handleRootAnd404) http.HandleFunc("/getClassesList", handleGetClassesList)