И я хочу сделать 1 модуль который они будут импортировать с некоторым набором общих для них функций.Если хотите так сделать, то можно просто сделать интерфейс, у которого методы будут совпадать с общими функциями которые вы хотите вынести, можете его вынести в отдельный файл/модуль при необходимости.
Я часа 4 ковырялся в статьях и видео уроках но так и не смог из 1 несчастного модуля импортировать функции в другой неменее несчастный модульМожно упрощенную версию сюда выложить и конкретнее написать что не получается
обновлялся счетчик отправленных сообщенийНужно отдельное API которое будет возвращать тебе значение счетчика для текущего чата, например по id чата. На стороне клиента нужно использовать js, сейчас обычно используют fetch реже XHR, соотвественно в js тебе нужно будет запустить фоновый процесс который будет опрашивать сервер раз в секунду например и обновлять счетчик
В целом можно ответить, что так решили разрабы, но в целом это логично, т.к. при присовении нового значения вы ничего не делаете с переменной, т.е. она фактически просто занимает память и не используется ни в каком выражении.
Вопрос: Почему присвоение переменной значения не считается использованием ?
value = value + 1В целом по логике этот случай тоже можно было бы отнести к неиспользованию, но вероятно тут такая логика, что это значение используется для вычисления нового значения, что по сути является использованием, компилятор не чекает используется дальше вычисленное значение но в данном случае это уже не особо и важно. В целом для обход not used есть такой способ
// No errors
a:= 1
b := 2
_, _ = a, b
Или, может быть, поделитесь опытом использования на производстве.Хз что подразуемевается под серьезным проектом. На практике их получается не так часто использовать. Например изнально была функция, которая на вход получала слайс и преобразовывала его в таски и помещала в пул , потом добавилось несколько других источников данных, с которыми нужно было тоже самое делать. В целом форматы данных отличались, но всё можно было преобразовать к общему формату. Выделил общие методы и использовал дженирики. В целом можно было бы обойтись и без них, но в моей ситуации это было довольно удобно, по сути можно было бы заменить интерфейсом.
Гугл с ошибкой не помог :(
sql: Scan error on column index 1, name "i_size": converting driver. Value type int64 ("-10") to a uint8: invalid syntaxМожно попробовать еще прочитать ошибку или засунуть ее в гугл переводчик.
структура, которая будет использоваться во множестве других пакетов(например, отправка отп кода через email или смс).Это можно вынести либо в отдельный проект, либо помещать такое в папку pkg, в которой обычно и лежат переиспользуемые пакеты.
Где правильно хранить интерфейс с методами этой структуры?Создайте отдельный пакет в том месте где вам удобно, главное чтобы не получилось циклических зависимостей в будущем. Конкретно для вашего случая, можете поискать как реализуют фабрику в го, мне кажется это должно вам помочь.
с чего начать?"golang start with rest api" вбить в гугле. Для начала написать простой сервер который обрабатывает GET, POST запросы. Если нужны конкретные материалы то можете начать с этого. Проверять как работают запросы можно через postman, curl или браузер.
смущает, что нет (или я плохо искал) единого фреймворка, который бы говорил, как писать код.Берите исходники gorilla/mux или gin(любые другие) и можете их использовать как пример.
Решение на Go принято писать как-то так:Вообще не далеко не всегда так пишут
Go мы из handler для student можем вызвать функцию из service для lesson. Вот в этом и заключается проблема. В go мы складываем все handlers в один пакет и внутри handler мы имеем пакет service, в котором лежат все service. ЭтотТак можно делать но это необязательно, можно делать хэндлеры в разных пакетах.
странный уровень абстракции - service.Поэтому его стоит использовать только тогда, когда это нужно а не просто ради лишнего слоя абстракции.
Например, в Java были репозитории с методами типа findUserBy(Id,Username и так далее)Вероятно использовалась ORM, в го они тоже есть. Но советовал бы вам попробовать пописать запросы в ручную, т.к. это довольно часто встречается можете для начала почитать гайд
Я слышал, что желательно делать поля неимпортируемыми и использовать геттеры и сеттерыА где слышали?Вообще это не всегда верно, например даже стандартная библиотека для работы с csv там можно настраивать поля напрямую. В целом если у вас поля с простыми типами данных то в целом это не имеет особого смысла. Это имеет смысл если нужно работать с интерфейса или спрятать за ними часть сложной логики. Насколько я знаю эти идеи тащат люди из других языков, но паттерны которые распространены в Java или C# не всегда подходят для го поэтому не стоит все буквально воспринимать.
Подскажите как это сделатьЕсли опыт в вебе есть, то просто пройти го тур, загуглить go roadmap и гуглить/читать книги/маны по нужному направлению.
как мне правильно описать эту функцию в интерфейсе?Если вы имеете ввиду, как скомпилировать код во втром случае, то вам нужно сделать так, чтобы структура удовлетворяла бы вашему интерефейсу, т.е. нужно возвращаемое значение 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,
}
}
И всё скомпилируется Когда я запускаю сервер, я подключаюсь к бд как админМожет я чего-то не понял, но где связь между запуском бд и подключением к ней, postgres же примерно так запускается sudo service postgresql start, а подключение уже идёт отдельно.
Как это сделать(сменить подключение)?Закрыть текущее и открыть новое, например считать данные из конфига и по ним сделать новое подключение, конкретнее сказать сложно, т.к. не знаю структуру вашего проекта.
подключаться под нужной ролью?В целом можно сделать соединения(пулы) с разными ролями в зависимости от прав пользователя.
(сменить подключение)?Так конечно можно делать, но база может быстро упасть под нагрузкой, т.к. открытие/закрытие соединения довольно тяжелый процесс.
есть ли у автоматической генерации минусыПомимо того, что озвучили еще есть проблема с тем, что генерируемый код обычно трудночитаемый.
какие плюсы у самописных инструментов?Так тут все зависит от разраба. Например обычно бывают тесты, примеры использования, +/- понятный код, мб кто-то будет с вами еще работать над проектом, с автогенерацией вряд ли такое будет. Но в целом людям не так часто нужно полноценное sdk, поэтому многие могут просто запилить пару своих функций для взаимодействия с сервисом.
По сравнению с одной библеотекой-sdk, которая на гитхабе дорабатывается уже 7 лет