refactoring - это тестовое упражнение для компании "TrueConf".
Главным преимуществом и главным недостатком Golang является GCC. Он позволяет не задумываться о ручном управлении памяти, однако не в меньшей мере влияет на производительность приложений. Поэтому в Golang разработке принято минимизировать использование кучи. Конкретно в этом примере, я бы мог предложить оnкзатся от записи типа
[]byte(string)
в пользу 2 методов Str2bts и Bts2str определённых в отдельном пакете в директории /pkg. Это снизит использование кучи и повысит производительность.
func Bts2str(b []byte) (s string) {
return *(*string)(unsafe.Pointer(&b))
}
func Str2bts(s string) (b []byte) {
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
bh.Data = sh.Data
bh.Cap = sh.Len
bh.Len = sh.Len
return b
}
Следующим пунктом я хотел бы отметить использование стандартных библиотек для кодирования и декодирования JSON. Существует множество библиотек выполняющих эту задачу эффективнее как по используемой памяти, так и по скорости. Вы можете сравнить все и выбрать то, что будет удобно:
Также отмечу, что JSON не едиственных формат обмена данными. Альтернативами ему могут служить GOB и Protobuf.
Стандартная библиотека net/http вынуждена на каждый запрос запускать горутину тем самым используя большое количество памяти, а также предоставляет блокирующий API-интерфейс ввод-вывода. Существуют библиотеки исправлющие эти недостатки. Hertz (если нужен HTTP) и Kitex (если нужен RPC) - это 2 наиболее приемлемых фреймворка для использования в продакшене, созданные компанией ByteDance.