Очень люблю grpc. Кайфанул от ностальгии. Советую глянуть на connect, который сделан поверх grpc, так что почти не потребует изменений, а так же прогнать код через govet, чтобы почистить устаревшие конструкции. К примеру, API waitgroup и capture счётчика цикла.
Потенциальные улучшения, которые, заодно, ответят на некоторые комментарии: 1) использование chunked upload, чтобы не десериализовать файлы в памяти целиком, а только их кусочки 2) использование простой абстракции для стораджа/репозитория, что позволит легко (почти без изменения кода) пересесть на серверлесс решения или изменить пути и права файлов, если понадобится
Спасибо за статью! У сожалению, у самих тэгов есть несколько проблем: они быстро нагружаются, особенно если мы туда добавим ещё JSON; они являются произвольными строками, а значит, компилятор не поймает ошибки; они не очевидны тем, кто не знает, что это такое. Очень круто, что есть возможность сторонней конфигурации. Но! Есть смысл делать валидаторы программными, чтобы компилятор сразу проверил возможность применения данного валидаторы. Плата - небольшой синтаксический оверхед (зато отсутствие какой-либо интерпретации или оверхеда на запуск или кеширование). Ну и, зачастую, не нужны сторонние библиотеки.
Сравнивать апельсины с яблоками - нехорошо. Необходима хоть какая-то нагрузка, иначе это просто нечестное сравнение. Или же мы должны спросить, сколько памяти займет миллион ожиданий и тогда код на языках с зелёным тредами будет другим. Включая го:
var wg sync.WaitGroup
for range 1e6 {
wg.Add(1)
time.AfterFunc(10*time.Second, wg.Done)
}
wg.Wait()
и давайте посмотрим, сколько это займет памяти теперь
Очень люблю grpc. Кайфанул от ностальгии. Советую глянуть на connect, который сделан поверх grpc, так что почти не потребует изменений, а так же прогнать код через govet, чтобы почистить устаревшие конструкции. К примеру, API waitgroup и capture счётчика цикла.
Потенциальные улучшения, которые, заодно, ответят на некоторые комментарии: 1) использование chunked upload, чтобы не десериализовать файлы в памяти целиком, а только их кусочки 2) использование простой абстракции для стораджа/репозитория, что позволит легко (почти без изменения кода) пересесть на серверлесс решения или изменить пути и права файлов, если понадобится
Спасибо за статью! У сожалению, у самих тэгов есть несколько проблем: они быстро нагружаются, особенно если мы туда добавим ещё JSON; они являются произвольными строками, а значит, компилятор не поймает ошибки; они не очевидны тем, кто не знает, что это такое. Очень круто, что есть возможность сторонней конфигурации. Но! Есть смысл делать валидаторы программными, чтобы компилятор сразу проверил возможность применения данного валидаторы. Плата - небольшой синтаксический оверхед (зато отсутствие какой-либо интерпретации или оверхеда на запуск или кеширование). Ну и, зачастую, не нужны сторонние библиотеки.
Сравнивать апельсины с яблоками - нехорошо. Необходима хоть какая-то нагрузка, иначе это просто нечестное сравнение. Или же мы должны спросить, сколько памяти займет миллион ожиданий и тогда код на языках с зелёным тредами будет другим. Включая го:
и давайте посмотрим, сколько это займет памяти теперь