Ответы пользователя по тегу Go
  • Выделяется ли память на аргумент функции переданного указателем?

    @dimuska139
    Backend developer
    pprof Вам в помощь. Потому использование указателей не всегда оправдано и зависит от конкретной ситуации.

    нужно ли стараться по максимуму работать именно через указатели

    Нет
    Ответ написан
    Комментировать
  • Golang. Как поставить внешний пакет на компьютер без интернета?

    @dimuska139
    Backend developer
    Как вариант, указать replace в go.mod на локальную папку. Ещё можно сделать кастомный GOPROXY и ставить пакеты через него. А сами пакеты хранить на компе без интернета (см. Athens).
    Ответ написан
    Комментировать
  • Можно ли передать индекс структуры указателем в функцию?

    @dimuska139
    Backend developer
    func isPasswordValid(password string) bool {
      if len(password) < 8 || len(password) > 128 {
        return false
      }
      return true
    }
    Ответ написан
    Комментировать
  • Парсинг скаченных сайтов?

    @dimuska139
    Backend developer
    Для решения этой задачи вам потребуется запускать go-сервер для каждого сайта. Нужно сделать так, чтобы можно было открыть index.html в браузере и подключить JS-файлы, после чего нужно подключаться к нему с помощью Selenium (чтобы выполнялся JS) и доставать оттуда данные. Скорее всего, пригодится вот эта библиотека. Возможно, кстати, сервить файлы и не потребуется, и можно их как-то сразу в Selenium подсунуть - там надо уже по факту смотреть.
    Ответ написан
    Комментировать
  • Как подружить go и Sphinx?

    @dimuska139 Автор вопроса
    Backend developer
    Может пригодится кому-то. Сейчас Sphinx юзать нет смысла, т.к. есть Manticore - они совместимы. И для работы с Manticore для Go есть официальный sdk-клиент.
    Ответ написан
    Комментировать
  • Как запустить интеграционные тесты в заданном порядке?

    @dimuska139
    Backend developer
    Так делать не правильно. Тесты не должны зависеть друг от друга.
    Ответ написан
    2 комментария
  • Слышал, что go не очень подходит для написания сервисов с большим количеством бизнес логики, какое мнение у вас?

    @dimuska139
    Backend developer
    Вообще начать стоит с того, что понятие "с большим количеством бизнес логики" довольно растяжимое. Если говорить о микросервисах, то в них обычно много бизнес-логики и не получается. Потому что если такое начинает происходить, то стоит задуматься, а точно ли в микросервисе нет лишней ответственности? Возможно, стоит этот сервис поделить на более мелкие?
    Немного из личного опыта и не совсем по теме вопроса, мало ли пригодится. Я писал микросервисы на go и заметил следующие недостатки (лично для меня):
    1. В большинстве микросервисов бывают довольно простые запросы к базе данных и удобно было бы использовать что-то вроде Doctrine или SQLalchemy. В go, к сожалению, инструментов такого уровня нет. Gorm лично мне не понравился совершенно.
    2. Недавно была необходимость запилить сервис, взаимодействующий со Sphinx, но нормальных библиотек для Go для этой задачи внезапно не оказалось. Есть вот такая, но она устарела (еще не позволяет ее нормально юзать в несколько потоков). Неустаревшей и нормальной библиотеки вообще нет. Либо я плохо искал.
    3. Сложно сделать нормальную структуру проекта, чтобы не было циклических зависимостей. По крайней мере, вскоре начинает не покидать ощущение, что пишешь какой-то код низкого качества. Хотя может это субъективно или проходит с опытом.
    4. Если не запилить что-то типа контейнера зависимостей, то покрывать тестами проект становится неудобно, т.к. тесты при запуске в параллель начинают юзать одни и те же глобальные переменные. Опять-таки может и это субъективно.
    5. Во фреймворке gin/gonic сложно запилить нормальную валидацию для json. Если в структуре, на которую маппишь, поле типа int, а ты передал в json число в кавычках (строку вместо числа по сути), то поймать такую ошибку и выдать нормальную ошибку валидации невозможно, т.к. валидация там (в этом фреймворке) запускается после маппинга.

    Плюсы:
    1. Строгая типизация
    2. Результат компиляции - один бинарь
    3. Довольно интересный проброс ошибок (многим не нравится, мне понравился)
    4. Высокая скорость
    5. Низкое потребление памяти
    6. Есть потоки
    Ответ написан
    3 комментария
  • Как работать с postgresql в go?

    @dimuska139
    Backend developer
    Вот pgx. Смотри ридми - там пример коннекта и использования. Удобно юзать в связке с sqlx. Можешь еще gorm попробовать, но лично мне он не понравился.
    Ответ написан
    4 комментария