Daniel
https://godoc.org/go.uber.org/zap#L
ну и в main что-то такое
func prepareLogger(level string) {
loggerConfig := zap.NewProductionConfig()
err := loggerConfig.Level.UnmarshalText([]byte(level))
if err != nil {
panic(err)
}
logger, err := loggerConfig.Build()
if err != nil {
panic(err)
}
zap.ReplaceGlobals(logger)
}
Eugenii
я так понял, что разные уровни логов в разные файлы писать, можно только разными инстанцами
а так как это требование, то может по этому отсеклось
Daniel
в реальности 12 факторов таки рулят
Daniel
а там прямо сказано - писать логи в файлы должен супервизор
Andrei 🦉
Foxcool
я так понимаю, есть еще какие-то централизованные сборщики логов. Типа выводишь логи в JSON. А он их берет из контенера и все это можно посмотреть потом на сервисе логагрегатора
Foxcool
с каикм-то анализом по полям и т.п.
Bohdan
Eugenii
особенность культурного наследия нации
Дмитрий
Всем добрый вечер, подскажите плиз. Есть []struct{a string b int} нужно добавить в структуру данные через append не получается... как можно реализовать добавление данных?
Aleksandr
как пробуешь?
Aleksandr
какая ошибка?
Foxcool
ну в структуру данные и не аппендят
Aleksandr
у него слайс
Foxcool
а записыват в поля конкретные
Foxcool
аа
Foxcool
тьфу
Foxcool
тога да, увидеть, что аппендит
Дмитрий
https://play.golang.org/p/-gayCAtJn62
Aleksandr
так у тебя слайс структур
Foxcool
эм
Foxcool
структуру опиши сначала как тип отдельный
Foxcool
type Brand struct {...}
Foxcool
и
append(brand, Brand{"Reebok", 4})
Foxcool
типа того
Foxcool
ну и brand уже есть []Brand
https://play.golang.org/p/P6j7d7Q0_Fr
Vadim
Привет
Vadim
Обновился до го 11, vscode перестал делать autocomplete
Sergey
с GO111MODULE случайно не игрался?
Дмитрий
Foxcool
Спасибо большое за разъяснение
еще, если по какой-то странной причине надо анонимно структуры описывать, то можно вот так упороться https://play.golang.org/p/ypO34ltfgKJ
Foxcool
т.е. заново описывать спеку структуры каждый раз
Foxcool
но думаю, без явной нужды это может считаться плохим стилем
Daniel
и задалбывает
Daniel
а почему у меня не поломался?
Daniel
вернее - он поломался, но я перекомпилял все тулзы, и он починился
Daniel
vscode сам предлагает, кстати, все перекомпилять
Michael
Там сломался автокомплит при определнных кейсах только вроде
Vadim
🎉
Anton
Привет!
Есть ли среди присутствующих кто-то, кто использует echo как основной фреймворк для написания веб-приложений?
Anton
Хотелось бы послушать советы или посмотреть может быть репозиторий со структурой проекта
Имею в голове собственную структуру, но допускаю, что в силу недостатка у меня опыта, она убогая получилась
Vadim
Vadim
Мне это всё очень не нравится
Anonymous
Эхо не эхо - сути особо не меняет.
Anton
Эхо не эхо - сути особо не меняет.
тем более)
просто я пару проектов уже делал с той структурой в голове, которую придумал и так или иначе сталкивался с проблемами циклических импортов. Я, конечно, как-то проблему решал, но скорее всего возникала она из-за того, что структура проекта изначально неверно заложена была
Anton
И еще
Когда приложение включает в себя какое-то АПИ, как вообще принято адекватно обрабатывать данные, которые в запросе приходят?
я для каждого метода в апи создаю отдельную структуру типа
type loginRequestBody struct {
Login string `json:"login"`
Password string `json:"password"`
}
После этого я получаю данные из запроса в эту структуру и передаю на обработку примерно так:
data := new(loginRequestBody)
if err := c.Bind(u); err != nil {
return err
}
result := UserController.Login(data.Email, data.Password)
Anton
выглядит как полное убожество)
можно это как-то разуменее делать?
Veaceslav
Вечер добрый, мужики я тут оплату через stripe делал, но появилось нужда сделать проверку по 3д секюр. Кто такое делал ? Для меня просто вообще не понятно как проверить нужна ли проверка для карты пользователя, а если нужна то откуда получить ссылку для редиректа ...
Veaceslav
Подскажите плиз кому не труда, заранее спасибо всем
Subbotin
Subbotin
А в остальном ничего не поменяешь осоьо
Anton
.
Есть такая ситуация: мы создаем юзера, есть метод из репозитория CreateUser, который должен создавать юзера в БД. Также этому юзеру будет присвоен айди, который потом надо будет вернуть.
Нормально ли будет сделать так, чтобы передавать в метод указатель на userData и тот модифицировал добавляя ему значение в поле Id, либо же делать чтобы этот метод возвращал копию структуры с дополнительным необходимым полем?
userData := models.User{
FirstName: req.FirstName,
LastName: req.LastName,
Email: req.Email
}
err = controller.db.CreateUser(userData)
🎉
id, err = controller.db.CreateUser(userData) а так, не?
.
🎉
Хм,
func (p *TutChtoto) CreateUser(userData) (id, error) {
...
return id, err
}
Vladislav
.
Я выбрал шаблон Репозиторий, из того что вы скинули похож на него DataMapper
Vladislav
Только тогда нужна ссылка на userData
Vladislav
Не вернуть пустую структуру, а модифицировать текущую, указав в ней ID тем самым после вставки в БД. Но я оговорился уже, что для этого уже ссылка нужна
Aleksandr
.
.
🎉
Верни int, err из функции, не мучайся.
🎉
Хм,
func (p *TutChtoto) CreateUser(userData) (id, error) {
...
return id, err
}
.
Верни int, err из функции, не мучайся.
Выше писал, что такой вариант не годится, если у нас несколько полей будет меняться. В таком случае прийдется вовращать несколько переменных, как то некрасиво получается
🎉
Aleksandr
.
По сути да
Aleksandr
решается identity generator'ом, который либо генерит id на стороне приложения (uuid) либо достает следующий id из базы. Второй вариант геморный и явно через жопу.
Vladislav
Vladislav
упс. опередили))
Vladislav
Тогда нужно по вашей логике отказываться от int'овых PRIMARY KEY и переходить на GUID'ы