Search
Write a publication
Pull to refresh

Comments 11

Я ожидал увидеть бенчмарки с wrk или типа того, если честно. А то написать-то высокоуровневую имплементацию вопрос-ответ — задача не особо сложная, сложно добиться производительности. Вот пример на эликсире, для сравнения.

Я не особо погружён в Go. Можете подсказать, зачем тут нужна ссылка?

server := &http.Server

Я не понял зачем автор использовал тут указатель, это и правда похоже на сгенеренный нейронкой пост.
Но на практике (по крайней мере в моей компании) обычно структура http сервера встраивается в другую структуру. И там используется указатель, чтобы при вероятном копировании конечной структуры не происходило копирование http сервера.

Из-за того что у сервера есть методы с pointer-receiver (например, ListenAndServe, Shutdown).

Так же делается указатель чтоб не делать копии множества полей которые содержит структура.

Еще возможны смены значений публичных полей, например Handler. Без указателя могут попасть копии, которые не изменятся, что чревато багами.

Сам против указателей и радею в команде за то чтоб использовали только там где они действительно нужны.

По-моему, конкретно в этом примере можно было обойтись.

По идее, указатель целесообразно использовать везде, где размер структуры не умещается в регистр

У этого подхода есть два существенных минуса

  1. Появляется потенциальное место для паники из-за nil pointer.

  2. Появляется потенциальное место из-за которого может измениться значение у поля тогда, когда мы это не ожидаем.

Стоит избегать указатели, и использовать их там, где они действительно нужны.

Я в своей практике много раз сталкивался с паниками и багами из-за указателей. Не в своем коде. В своем коде стараюсь такие вещи проверять unit тестами, что много раз меня спасало.

Я был удивлен, кстати, что в Go не добавили константные указатели, как в том же C

У вас в статьях всегда используются списки. Вы выдачу нейросети как-то подправляете, или постите прямо то, что она выдаёт? Не проще ли постить просто промпт, по которому можно получить ответ, чем занимать место на серверах?

Хотя, я понимаю, что рано или поздно нужная версия нейросети устареет, и промпт перестанет работать так, как ожидается. Это будет как исходник, который уже не скомпилировать, потому что того окружения, под которое он создан, давно нет.

Почитай про изменения пакета net/http в Go 1.22.
Теперь можно задавать отдельные обработчики для каждого метода вот таким образом mux.HandleFunc("POST /form", postFormHandler).
На самом деле там ещё много интересных нововведений, которые позволяют полностью отказаться от сторонних роутеров на подобии chi.

Sign up to leave a comment.

Articles