Maxim
https://github.com/GoAdminGroup/go-admin
Maxim
пример правильной архитектуры для фронта, правда админского.
Maxim
правда это бек, который генерит html, если чистый фронт, то блин это жестко
Maxim
Не проще 2 сервиса, grpc как универсальный протокол?
Maxim
Есть второй вариант, использовали в продуктиве, сек.
Maxim
вот https://github.com/hashicorp/go-plugin/tree/master/examples/grpc
Maxim
впринципе тоже, но обертка и отловы ошибок и т.д. приятнее + все обернуто как плагин.
Μαριούπολη
ребят , при команде :migrate create -ext sql -dir db/migration -seq init_schema" ошибка error: no such option: -e
Μαριούπολη
в чем может быть проблема? не нагуглил(
Μαριούπολη
(на убунту)
Alexander
не знаю про тулзу, но обычно такое лечится заменой - на —
Alexander
Телега поменяла, не заметил
Shaplin
Сижу на маке с M1. При дебаге на goland пишет 'darwin/amd64 is not supported. Use go sdk for darwin/arm64'. Далее скачал golang версии 1.17 с arm64, но все равно та же ошибка.
Μαριούπολη
ребят , при команде :migrate create -ext sql -dir db/migration -seq init_schema" ошибка error: no such option: -e
ошибка решилась с помощью https://github.com/golang-migrate/migrate/blob/master/cmd/migrate/README.md (for linex (*.dev package) и перезагрузкой систеемы
Shaplin
А как ее удалить? При go version пишет, что стоит arm
🔥
На пути к новой версии
Евгений
ошибка решилась с помощью https://github.com/golang-migrate/migrate/blob/master/cmd/migrate/README.md (for linex (*.dev package) и перезагрузкой систеемы
В этой либе как раз есть проблема, хранится только последняя версия миграции, проблема: Developer A create migration file on branch issue-a, version is: 20190813143726 Developer B create migration file on branch issue-b, version is: 20190828180746 Currently, if issue-b release before issue-a, the migration 20190813143726 will be ignored.
Null
Docker для разработки Go с горячей перезагрузкой https://nuancesprog.ru/p/5657/ @Golang_google
Maks
В этой либе как раз есть проблема, хранится только последняя версия миграции, проблема: Developer A create migration file on branch issue-a, version is: 20190813143726 Developer B create migration file on branch issue-b, version is: 20190828180746 Currently, if issue-b release before issue-a, the migration 20190813143726 will be ignored.
Миграции ведь всё равно руками писать. А там мигратор написан универсальный к разным субд. Вам это вряд ли нужно. Почему бы не написать свою migrate.go которая будет просто сканить либу, сканить таблицу миграций и выполнять нужные миграции (которые не выполнены)
Maks
Крч у нас есть кейс, когда нужно с пагинацией и фильтрами выводить данные с довольно большой таблицы
Maks
как обычно делают пагинацию - оффсет и лимит. Кроме этого нужно знать общее число записей
Maks
Но! Оффсет на, к примеру, странице 10.000 по 100 записей на страницу это очень долго
Maks
если учесть еще и фильтрацию
Maks
Получается идет 2 долгих запроса. Общее кол-во (без лимита и оффсета но с фильтрами) через каунт. И просто запрос уже с оффсетом и каунтом. Может кому пригодится, но я придумал одно решение: При получении кол-ва - мы запрашиваем айдишники в массив. Потом из массива берем айдишники по индексу (через оффсет и лимит). И достаем из бд уже по айди.
Maks
ну а количество через длину массива узнаем
Maks
у нас к слову в таблице 10 лямов записей
Shaplin
В прото написано: message ValidationError { string field = 1; } Прописываю команду make generate, вылезает ошибка и прото автоматически изменяет данную запись на: message ValidationError { string field = 1 ; }1 Текст ошибки: ...api/categories/categories.proto:37:2:syntax error: unexpected int literal
Maks
скинуть можешь?
Anonymous
Читаю статью на Хабре и возник вопрос: кто-нибудь это пробовал из вас?
Дмитрий
скинуть можешь?
Не, сейчас не могу. Не у станка
Emil
Господа, есть лучшая практика для типов данных в го и постгресе для обозначения денег?
Alexander
так вы 10М айдишников достаете или чего?
Alexander
1
Alexander
Получается идет 2 долгих запроса. Общее кол-во (без лимита и оффсета но с фильтрами) через каунт. И просто запрос уже с оффсетом и каунтом. Может кому пригодится, но я придумал одно решение: При получении кол-ва - мы запрашиваем айдишники в массив. Потом из массива берем айдишники по индексу (через оффсет и лимит). И достаем из бд уже по айди.
Alexander
у нас к слову в таблице 10 лямов записей
Alexander
Читаю статью на Хабре и возник вопрос: кто-нибудь это пробовал из вас?
curl (там есть костыльность в нашем кейсе). google CLD для детекции языка используем: детектит в пару раз быстрее гошной реализации которую нашел, но главное качественнее, чуть ли не по одному слову хорошо определяет язык
Alexander
опять же OpenCV, Tensorflow можно использовать как вариант, когда есть питонистые дата саентисты и есть потребность их наработки внедрить в микро сервис чтобы быстро работало
Emil
decimal
👌👌👌✨✨✨
Shaplin
а в мейке что?
If none of your local proto files failed, you can ignore this message bin/buf generate --path vendor.protogen/gitlab.ozon.ru/ocb/categories/api/api/categories/categories.proto in .: exit status 100:
Maxim
Не ошибка, а что в сценарии Makefile который.
Maxim
случаем не открыто каке нибудь ide с отслежкой форматирования, generate начинает работу по форматированию и в этот момент ide тоже этим занимается.
Maxim
В прото написано: message ValidationError { string field = 1; } Прописываю команду make generate, вылезает ошибка и прото автоматически изменяет данную запись на: message ValidationError { string field = 1 ; }1 Текст ошибки: ...api/categories/categories.proto:37:2:syntax error: unexpected int literal
судя по входу и выходу, реально какой то конфликт сдвига при форматировании. Один таб, другой пробел и по seek(переходу) не правильно смещение на запись.
Shaplin
А все, разобрался. У меня make run был включен в другом терминале
Anonymous
Привет! Пару недель назад я видел, как внутрь функции запихали ещё одну функцию. Сейчас пытаюсь найти это, но не получается Можете подсказать где такое почитать? Если вдруг поможет, вот что было: func main() { ...code... func() { ...code... } }
Vitaliy
Замыкание посмотри
Anonymous
Нужно очень хорошо понимать, зачем это нужно.
Я понял что это не то, что нужно.. У меня есть строка bot.Send(tgbotapi.NewMessage(update.Message.Chat.ID, "Hello World")) Я хотел запихнуть её в отдельную функцию, чтобы вместо неё писать sms(string). Например, sms("Hello World) Но мне выдаёт ошибку, так как аргументы bot и update объявлены в функции main. Пробовал объявить их в функции sms, но тогда возникает ошибка из-за двух запусков одновременно. Вот и решил попробовать функцию внутри функции..но понял, что это не то, что нужно Как я могу поступить?
Anonymous
Может, можно передать в функцию sms аргументы из функции main?
Alexander
что тебе мешает передавать в твою функцию и bot, и update дополнительно?
МишанЯ
Может, можно передать в функцию sms аргументы из функции main?
Нуууу...а как еще? Делай функцию sms(аргумент string) и твой код, в чем трабл?)))
Anonymous
что тебе мешает передавать в твою функцию и bot, и update дополнительно?
Тогда запускается два бота, что вызывает конфликт...
Alexander
замыкания не для этого нужны. в основном когда ты не можешь поменять сигнатуру функции (твоя функция куда-то пихается), и нужен дополнительный контекст
Alexander
Тогда запускается два бота, что вызывает конфликт...
зачем запускать два бота? передавай туда своего созданного ранее
МишанЯ
Мне кажется ему надо показать кусок кода
МишанЯ
Своего
Anonymous
https://pastebin.com/qiTUnhXy Без функции
Alexander
https://pastebin.com/qiTUnhXy Без функции
а что сделать хочешь?
Anonymous
https://pastebin.com/qiTUnhXy Без функции
https://pastebin.com/CRtB21bT с функцией (выдаёт ошибку о том, что bot и update не определены) https://pastebin.com/x8BWhLxv После определения запускаются два бота сразу и возникает конфликт
Anonymous
а что сделать хочешь?
Укоротить строчку отправки сообщений и всё..чтобы каждый раз длинную строчку не писать
Anonymous
А..увидел А как сделать так, чтобы bot определялся к старому подключению?
Anonymous
Попробую
Alexander
https://pastebin.com/CPY2Hgkk
Alexander
это что ли сделать хотел?
Maks
а еще у тебя после проверки на ошибку и вывода лог паник почему то будет продолжаться выполняться основной код)
Maks
он водном случае почему ты вызывает один сенд в другом другой - смс)
Alexander
там что-то вообще путаница. складывается впечатление, что человек прослышал, что go крутой и решил сразу тележное апи поюзать не изучив языка или программирование в целом почти никак =)
Maks
А вообще да, лучше просто в такой реализации минималистичнно простой написать func (b *tgapi.BotApi) sendSms(chatId int, message string) { b.Send(tgbotapi.NewMessage(chatId, message)) }
Maks
что то типо того