Хороший обзор рекомендаций в отношении структуры Go-проектов представила Кэт Зиен (Kat Zien) в своем докладе на конференции GopherCon 2018 (https://oreil.ly/0zHY4).
Куча — это память, управление которой осуществляется сборщиком мусора (или вручную в таких языках, как C и C++).
Вместо того чтобы выделять новую память при выполнении каждой операции чтения из источника данных, необходимо один раз создать срез байтов и использовать его в качестве буфера для чтения из источника данных:
file, err := os.Open(fileName)
if err != nil {
return err
}
defer file.Close()
data := make([]byte, 100)
for {
count, err := file.Read(data)
if err != nil {
return err
}
if count == 0 {
return nil
}
process(data[:count])
}