Утечка памяти в пакете net/http
Я недавно начал изучать Golang и решил написать на нем сервис-сборник языков программирования (серверная часть написана на Golang).
Небольшая заметка: сервис-сборник языков программирования - (в данном случае) это сервис, который является "библиотекой" языков программирования, где можно добавлять или удалять их (важно: это я не успел добавить).
Сервис создан, все работает, но меня не устраивает тот факт, что каждый переход на другой адрес (например, localhost:8080/langs?s=Kotlin
или localhost:8080/langs?s=Clojure
) стоит мне 100-300 КБ, и при этом память (ОЗУ) не освобождается "сборщиком" мусора Golang. Почему так? Сервис не использует сторонние библиотеки!
До переходов по адресам (синей стрелкой обозначен исполняемый файл сервера):
После переходов по адресам:
Интернет подсказывает, что для решения моей проблемы нужно профилировать код (net/http/pprof
'ом). Однако я там ничего не понял.
Вот код:
package main
import (
"encoding/json"
"html/template"
"net/http"
"fmt"
"strings"
"path/filepath"
"os"
)
type Language struct {
Company string `json:"company"`
Name string `json:"name"`
Type string `json:"type"`
WhereUsed []string `json:"whereused"`
TypeCasting string `json:"type_casting"`
Color string `json:"color"`
}
func Home(writer http.ResponseWriter, request *http.Request) {
dir, _ := os.ReadDir("languages")
DataArray := []string{}
for _, data := range dir {
DataArray = append(DataArray, strings.ReplaceAll(data.Name(),filepath.Ext(data.Name()),""))
}
tmp, _ := template.ParseFiles("index.html")
tmp.Execute(writer, DataArray)
}
func GetItem(writer http.ResponseWriter, request *http.Request) {
var Lang string = request.URL.Query().Get("s")
js_not_ready_yet, _ := os.ReadFile(fmt.Sprintf("./languages/%s.json",Lang))
var About Language
_ = json.Unmarshal(js_not_ready_yet,&About)
tmp,_ := template.ParseFiles("template.html")
tmp.Execute(writer,About)
}
func main() {
http.HandleFunc("/lang", GetItem)
http.HandleFunc("/",Home)
http.ListenAndServe(":8080",nil)
}
Пожалуйста, укажите на мою ошибку. Я очень не хочу верить в то, что это является особенностью языка.