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

    @calculator212
    И я хочу сделать 1 модуль который они будут импортировать с некоторым набором общих для них функций.
    Если хотите так сделать, то можно просто сделать интерфейс, у которого методы будут совпадать с общими функциями которые вы хотите вынести, можете его вынести в отдельный файл/модуль при необходимости.
    Я часа 4 ковырялся в статьях и видео уроках но так и не смог из 1 несчастного модуля импортировать функции в другой неменее несчастный модуль
    Можно упрощенную версию сюда выложить и конкретнее написать что не получается
    Ответ написан
    Комментировать
  • Как предотвратить бесконечную загрузку страницы при отправке post запроса?

    @calculator212
    обновлялся счетчик отправленных сообщений
    Нужно отдельное API которое будет возвращать тебе значение счетчика для текущего чата, например по id чата. На стороне клиента нужно использовать js, сейчас обычно используют fetch реже XHR, соотвественно в js тебе нужно будет запустить фоновый процесс который будет опрашивать сервер раз в секунду например и обновлять счетчик
    Ответ написан
    Комментировать
  • Почему присвоение значения переменной не считается использованием переменной?

    @calculator212

    Вопрос: Почему присвоение переменной значения не считается использованием ?
    В целом можно ответить, что так решили разрабы, но в целом это логично, т.к. при присовении нового значения вы ничего не делаете с переменной, т.е. она фактически просто занимает память и не используется ни в каком выражении.
    value = value + 1
    В целом по логике этот случай тоже можно было бы отнести к неиспользованию, но вероятно тут такая логика, что это значение используется для вычисления нового значения, что по сути является использованием, компилятор не чекает используется дальше вычисленное значение но в данном случае это уже не особо и важно. В целом для обход not used есть такой способ
    // No errors
    a:= 1
    b := 2
    _, _ = a, b


    Про "if value > 5 {" еще проще, это уже полноценное использование переменной в условии
    Ответ написан
    Комментировать
  • Кто нибудь применял или видел generics в серьезных Go проектах?

    @calculator212
    Или, может быть, поделитесь опытом использования на производстве.
    Хз что подразуемевается под серьезным проектом. На практике их получается не так часто использовать. Например изнально была функция, которая на вход получала слайс и преобразовывала его в таски и помещала в пул , потом добавилось несколько других источников данных, с которыми нужно было тоже самое делать. В целом форматы данных отличались, но всё можно было преобразовать к общему формату. Выделил общие методы и использовал дженирики. В целом можно было бы обойтись и без них, но в моей ситуации это было довольно удобно, по сути можно было бы заменить интерфейсом.
    Реальный плюс дженериков в том, что в ide (по крайней мере в goland) проще искать код методов и ты уже сразу знаешь какие типы они реализуют, что упрощает поддержку кода (тут субъективно).
    С одной стороны некоторых возможностей дженериков не хватает, но с другой стороны радует, что код на го не будет похож на плюсовый код в бусте, и в основном дженерики используются там где это нужно.
    Ответ написан
    Комментировать
  • Почему не сетится значение из БД в структуру в поле uint?

    @calculator212
    Гугл с ошибкой не помог :(

    sql: Scan error on column index 1, name "i_size": converting driver. Value type int64 ("-10") to a uint8: invalid syntax
    Можно попробовать еще прочитать ошибку или засунуть ее в гугл переводчик.
    Проблема тут не с sqlx, а с тем, что ты хочешь запихнуть в поле uint отрицательное значение, на что база тебе выдает ошибку(так и должно быть). Если нужны отрицательные значения в базе то используй просто int
    Ответ написан
    Комментировать
  • Как правильно регулировать связанность компонентов?

    @calculator212
    структура, которая будет использоваться во множестве других пакетов(например, отправка отп кода через email или смс).
    Это можно вынести либо в отдельный проект, либо помещать такое в папку pkg, в которой обычно и лежат переиспользуемые пакеты.
    Где правильно хранить интерфейс с методами этой структуры?
    Создайте отдельный пакет в том месте где вам удобно, главное чтобы не получилось циклических зависимостей в будущем. Конкретно для вашего случая, можете поискать как реализуют фабрику в го, мне кажется это должно вам помочь.
    Ответ написан
    Комментировать
  • Хочу сделать API на Go, с чего начать?

    @calculator212
    с чего начать?
    "golang start with rest api" вбить в гугле. Для начала написать простой сервер который обрабатывает GET, POST запросы. Если нужны конкретные материалы то можете начать с этого. Проверять как работают запросы можно через postman, curl или браузер.
    Ответ написан
    Комментировать
  • Почему проблема с cors не исчезла?

    @calculator212
    Для cors лучше свои хендлеры писать, будет проще потом работать
    Ответ написан
    Комментировать
  • Как правильно структурировать проект в Go?

    @calculator212
    смущает, что нет (или я плохо искал) единого фреймворка, который бы говорил, как писать код.
    Берите исходники gorilla/mux или gin(любые другие) и можете их использовать как пример.

    Решение на Go принято писать как-то так:
    Вообще не далеко не всегда так пишут

    Go мы из handler для student можем вызвать функцию из service для lesson. Вот в этом и заключается проблема. В go мы складываем все handlers в один пакет и внутри handler мы имеем пакет service, в котором лежат все service. Этот
    Так можно делать но это необязательно, можно делать хэндлеры в разных пакетах.
    странный уровень абстракции - service.
    Поэтому его стоит использовать только тогда, когда это нужно а не просто ради лишнего слоя абстракции.
    Ответ написан
    Комментировать
  • Как правильно устанавливать соединение с БД?

    @calculator212
    Например, в Java были репозитории с методами типа findUserBy(Id,Username и так далее)
    Вероятно использовалась ORM, в го они тоже есть. Но советовал бы вам попробовать пописать запросы в ручную, т.к. это довольно часто встречается можете для начала почитать гайд
    Ответ написан
    Комментировать
  • В каких случаях использовать импортируемые поля в структуре go?

    @calculator212
    Я слышал, что желательно делать поля неимпортируемыми и использовать геттеры и сеттеры
    А где слышали?Вообще это не всегда верно, например даже стандартная библиотека для работы с csv там можно настраивать поля напрямую. В целом если у вас поля с простыми типами данных то в целом это не имеет особого смысла. Это имеет смысл если нужно работать с интерфейса или спрятать за ними часть сложной логики. Насколько я знаю эти идеи тащат люди из других языков, но паттерны которые распространены в Java или C# не всегда подходят для го поэтому не стоит все буквально воспринимать.
    На редите есть обсуждение этого вопроса тут.
    Ответ написан
    2 комментария
  • Как использовать рекомендуемый нейминг интерфейсов?

    @calculator212
    В целом там написано для большинства случаев, если нет возможности добавить -er то не нужно натягивать сову на глобус, ниже пример из исходников самого языка
    642f2c660601c893729082.png
    Ответ написан
    Комментировать
  • Как перейти с Python Django на Go?

    @calculator212
    Из похожего - это beego, но стоит прочесть https://habr.com/ru/post/444022/. Многие используют gin или что-то в этом духе(всё это обертки над стандартной net/htpp) или используют обертки над fasthttp.
    Подскажите как это сделать
    Если опыт в вебе есть, то просто пройти го тур, загуглить go roadmap и гуглить/читать книги/маны по нужному направлению.
    Ответ написан
    Комментировать
  • Как прочитать конкретную строку в файле по её номеру(golang)?

    @calculator212
    тут можно посмотреть
    Ответ написан
    Комментировать
  • Как описать функцию в интерфейсе?

    @calculator212
    как мне правильно описать эту функцию в интерфейсе?
    Если вы имеете ввиду, как скомпилировать код во втром случае, то вам нужно сделать так, чтобы структура удовлетворяла бы вашему интерефейсу, т.е. нужно возвращаемое значение SetNum поменять на IGroup.
    type IGroup interface {
    	SetNum(num int) IGroup
    }
    
    type Group struct {
    	num int
    }
    
    
    func (r Group) SetNum(num int) IGroup {
    	r.num = num
    	return r
    }
    
    func NewGroup(num int) Group {
    	return Group{
    		num: num,
    	}
    }
    И всё скомпилируется
    Ответ написан
  • Как менять подключения к базе данных во время работы веб-сервера?

    @calculator212
    Когда я запускаю сервер, я подключаюсь к бд как админ
    Может я чего-то не понял, но где связь между запуском бд и подключением к ней, postgres же примерно так запускается sudo service postgresql start, а подключение уже идёт отдельно.
    Как это сделать(сменить подключение)?
    Закрыть текущее и открыть новое, например считать данные из конфига и по ним сделать новое подключение, конкретнее сказать сложно, т.к. не знаю структуру вашего проекта.
    подключаться под нужной ролью?
    В целом можно сделать соединения(пулы) с разными ролями в зависимости от прав пользователя.

    (сменить подключение)?
    Так конечно можно делать, но база может быстро упасть под нагрузкой, т.к. открытие/закрытие соединения довольно тяжелый процесс.
    Ответ написан
  • Golang как отправить GET запрос?

    @calculator212
    400 Bad Request
    cloudflare

    Да интересно, что же не так с эти запросом
    Ответ написан
    Комментировать
  • Насколько хорошо Golang подходит для создания десктопных приложений с графическим интерфейсом?

    @calculator212
    Если вы просто хотите написать +/- стандартное приложение, то его вполне можно использовать, но если захотите что-то специфическое, то скорее всего столкнетесь с проблемами. Также есть такая проблема, что десктопа делают на го мало, поэтому все проблемы придется решать самому, т.к. сообщества толком нет.
    Ответ написан
    Комментировать
  • Совместимы ли Golang и Machine Learning?

    @calculator212
    Зависит какой раздел интересует, в целом даже есть книга по го и машинному обучению. Есть порт opencv на го но он неполный.
    Ответ написан
    Комментировать
  • Стоит ли тратить время на самописный клиент/sdk для какого то (rest) api?

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

    какие плюсы у самописных инструментов?
    Так тут все зависит от разраба. Например обычно бывают тесты, примеры использования, +/- понятный код, мб кто-то будет с вами еще работать над проектом, с автогенерацией вряд ли такое будет. Но в целом людям не так часто нужно полноценное sdk, поэтому многие могут просто запилить пару своих функций для взаимодействия с сервисом.
    По сравнению с одной библеотекой-sdk, которая на гитхабе дорабатывается уже 7 лет

    Вообще странно, что существующий столько лет сервис не имеет нормального sdk, либо он не особо популярный.
    Ответ написан
    Комментировать