да что вы, я серверный enterprise программист, пишу в основном на Джаве дремучих версий. JS-то умею едва-едва, а про Go и вовсе только краем уха слышал. слишком уж новая это штука для энтерпрайза. bolk вот сможет на нём написать, если захочет, конечно :)
Конечно, для домашних проектов, написанных от скуки, это не принципиально, но всё же не могу удержаться от замечаний по коду:
1. Нет проверки размера запроса. Вредный клиент может положить сервер, послав ему очень длинную последовательность единичек.
2. Если пакеты придут таким образом, что CR будет в одном пакете, а LF в другом, то клиент так никогда ответа и не получит.
3. Вероятно, query += порождает кучу копирований и реаллокаций, т.к. строки в JS (как и в Java) неизменяемы.
4. Не уверен, но вполне вероятно, клиент, добавляя в запрос точки, может получить доступ ко всей файловой системе.
3. Строки неизменяемы в JS, да, и когда-то имело смысл вместо += использовать Array#join или даже String#concat, но сейчас считается что транслятор достаточно умен и такие вещи оптимизирует получше человека. Синтетические тесты это, в общем, доказывают, особенно для V8.
Было как-то выступления ребят из Яндекса, если не ошибаюсь, про шаблонизацию на клиенте, и они как раз гооворили, что, на удивление, банальная конкатенация работает в наше время уже очень быстро. По выступлению запись в инете можно найти, если интересно.
Учитывая, что по спецификации селектор не может быть длиннее 255 символов (при этом поле отображаемого имени — не более 70; по задумке он обязан всегда влазить в один пакет), то если бы код предназначался для реального использования, на входе было бы необходимо поставить такую проверку. Это сразу сняло бы первые два замечания.
Четвёртое на самом деле полностью нивелируется другим багом, который не позволит выйти за пределы ROOT_DIR :)
Для третьего у меня нет оправдания, там однозначно надо использовать Buffer.toString(), а для answer += — Array.join(), или задействовать какой-нибудь StringBuilder.
Хорошо, что никто никогда не будет ставить этот экзерсис на пром.
Когда программисту нечем заняться, он пишет Gopher-сервер