Daniel
теперь вы можете сами решить, лучше ли он
Stanislav
ну вижу что мне не убедить вас что сильная связанность это плохо. окей, каждый имеет право на свое мнение
а как вы в Go хотите добиться слабой связности? парсер флагов в микросервис? :D
Dmitry
теперь вы можете сами решить, лучше ли он
у меня еще осталось пара вопросов
Slava
да, я в курсе что идеал не достижим. но стремиться то надо, а не написали как смогли
надо код писать и продукты делать, а не стремиться куда-то =)
Slava
только так можно заработать миллиарды ^_^
Dmitry
а как вы в Go хотите добиться слабой связности? парсер флагов в микросервис? :D
я вас не пойму. причем тут микросервис. я говорю о связи между сущностями в одном выполняемом файле.
Stanislav
я вас не пойму. причем тут микросервис. я говорю о связи между сущностями в одном выполняемом файле.
ну вот у вас есть пакет config, который хочет путь до конфига из CLI. Есть пакет http, который хочет адрес и порт для прослушки из CLI. Ваши действия?
Daniel
передать, конечно
Daniel
не надо общий конфиг втаскивать в кишки
Daniel
но!
Daniel
правильно организованный конфиг будет состоять из структур, которые как раз и можно будет отправить в сервис
Dmitry
правильно организованный конфиг будет состоять из структур, которые как раз и можно будет отправить в сервис
и структуры не привязаны к конкретному парсеру. заполнять их через sflags или любой другой парсер, не имеет значения
Daniel
Возможно
Daniel
А, возможно, удобно указать инфу для парсера тегами
Kirill
А, возможно, удобно указать инфу для парсера тегами
А какой инфы недостаточно при известном имени поля и типе?
Daniel
имя параметра, описание параметра
Kirill
Шорткат? Так если их на самом нижнем уровне задавать, могут со временем появиться конфликты
Kirill
Я, конечно, не настоящий сварщик, а маску я на стройке нашёл, и сверхкрупные cli, возможно, и не делал, но всё же - смотря какую инфу там писать
Kirill
Описание-то можно из коммента вычитать при желании
Maxim
Отвечаю по update.CallBackQuery.id , все равно ответ кнопки не приходит.
Дайте мне пару часов проснуться, поесть и повторить то что вы делаете для отладки
Maxim
хорошо
Не знаю в чём у вас проблема. У меня кнопка спокойно тречится после клика
Maxim
func main() { bot, err := tg.New(accessToken) errCheck(err) for update := range bot.NewLongPollingChannel(nil) { switch update.Type() { case tg.UpdateMessage: upd := update.Message dlog.D(upd) if !bot.IsCommandToMe(upd) { continue } msg := tg.NewMessage(upd.Chat.ID, "hello world") msg.ReplyMarkup = tg.NewInlineKeyboardMarkup( tg.NewInlineKeyboardRow( tg.NewInlineKeyboardButton("click me!", "super secret"), ), ) bot.SendMessage(msg) case tg.UpdateCallbackQuery: upd := update.CallbackQuery dlog.D(upd) default: dlog.D(update) } } }
Maxim
func main() { bot, err := tg.New(accessToken) errCheck(err) for update := range bot.NewLongPollingChannel(nil) { switch update.Type() { case tg.UpdateMessage: upd := update.Message dlog.D(upd) if !bot.IsCommandToMe(upd) { continue } msg := tg.NewMessage(upd.Chat.ID, "hello world") msg.ReplyMarkup = tg.NewInlineKeyboardMarkup( tg.NewInlineKeyboardRow( tg.NewInlineKeyboardButton("click me!", "super secret"), ), ) bot.SendMessage(msg) case tg.UpdateCallbackQuery: upd := update.CallbackQuery dlog.D(upd) default: dlog.D(update) } } }
ID: (string) (len=18) "1234567890", InlineMessageID: (string) "", ChatInstance: (string) (len=20) "-1234567890", Data: (string) (len=12) "super secret", GameShortName: (string) "", From: (*telegram.User)(0xc4201a13b0)({ ID: (int) 1234567890, IsBot: (bool) false, FirstName: (string) (len=5) "Maxim", LastName: (string) (len=7) "Lebedev", Username: (string) (len=6) "toby3d", LanguageCode: (string) (len=2) "ru" }), Message: (*telegram.Message)(0xc4203e0380)({ ID: (int) 1488, ForwardFromMessageID: (int) 0, From: (*telegram.User)(0xc4201a1400)({ ID: (int) 1234567890, IsBot: (bool) true, FirstName: (string) (len=32) "Давай до свидания", LastName: (string) "", Username: (string) (len=12) "toby3d_robot", LanguageCode: (string) "" }), ForwardFrom: (*telegram.User)(<nil>), LeftChatMember: (*telegram.User)(<nil>), Date: (int64) 1527943720, ForwardDate: (int64) 0, EditDate: (int64) 0, MigrateToChatID: (int64) 0, MigrateFromChatID: (int64) 0, Chat: (*telegram.Chat)(0xc42029c960)({ ID: (int64) 1234567890, Type: (string) (len=7) "private", Title: (string) "", Username: (string) (len=6) "toby3d", FirstName: (string) (len=5) "Maxim", LastName: (string) (len=7) "Lebedev", Description: (string) "", InviteLink: (string) "", StickerSetName: (string) "", AllMembersAreAdministrators: (bool) false, CanSetStickerSet: (bool) false, Photo: (*telegram.ChatPhoto)(<nil>), PinnedMessage: (*telegram.Message)(<nil>) }), ...
Maxim
И даже что-то делать могу на её основе: ... case tg.UpdateCallbackQuery: upd := update.CallbackQuery dlog.D(upd) ans := tg.NewAnswerCallbackQuery(upd.ID) ans.Text = "sosi pisos" bot.AnswerCallbackQuery(ans)
Maxim
Более того, режим inline mode в папаботе не влияет на работу кнопок. Только на режим поиска в поле ввода
heavycharged
Друзья, кто юзал либу tealeg/xlsx, можете подкинуть идей? Пишу в файл хидер (заголовок таблицы) - все ок. Начинаю писать ниже - и ничего не пишеться. Что за хрень может быть? Кто-то может сталкивался?
heavycharged
Причем есть метод WriteHeader(), в нем пишется хидер, есть метод Save() который сохраняет таблицу, если в нем вызвать x.sheet.Cell(10, 2).Value = "TEST", то в таблицу запишет тест. а вот метод AddPosition у моей структуры вообще ничего не хочет писать. Дебагером ловлю брейкпойнты, все вызывается, значения все ок, но в тупую ничего не пишет.
heavycharged
не, AddPosition это метод моей структурки, внутри которой есть *xlsx.File и *xlsx.Sheet
heavycharged
Я уже даже написал метод FillDemoData, и оттуда тоже ничего не пишет.
Dmitry
1 вариант : ты пишешь не туда . 2 вариант: ты пишешь рано или поздно
Dmitry
3 вариант - это баг, но он маловероятен в репе с 2к звездочками
heavycharged
да это мой ебак скорее всего, потому что: у меня есть 4 метода: 1. RegisterSuppliers([]string) - регистрирует поставщиков (шапка файла), тут все ок, они записываются 2. AddPosition(Sku) - записывает артикул в ячейку (отсюда ни одна запись не происходит) 3. AddDemoData() - написал для дебага, отсюда тоже ни одна запись не попадает 4. Save() - сохраняет файл, отсюда вся запись происходит нормально. Все методы определены через pointer reciever.
heavycharged
2 метод пробывал в тупую писать "TEST", ни в одну ячейку ничего не попало
heavycharged
асинхронщины тут нет
heavycharged
т.е., вариант 1: я пишу не туда. но как это может быть - ума не приложу.
heavycharged
func (x *XlsxWriter) AddPosition(sku Sku) error { for row := 0; row < 10; row++ { for col := 0; col < 100; col++ { x.sheet.Cell(row, col).Value = "test value" } } return nil }
heavycharged
вот в тупую итерируюсь по ячейкам и пишу везде один и тот же текст: "test value"
heavycharged
а вот файл: https://i.imgur.com/qKFsWhQ.png
heavycharged
а сейчас, ради прикола скопирую цикл в RegisterSuppliers
heavycharged
https://i.imgur.com/DRcrLqy.png
heavycharged
ну что за дичь то, а?
heavycharged
func (x *XlsxWriter) RegisterSuppliers(suppliers []string) error { for row := 0; row < 10; row++ { for col := 0; col < 100; col++ { x.sheet.Cell(row, col).Value = "test value" } } return nil }
heavycharged
перенес цикл в метод Save(), видно даже что стили сохранились от RegisterSupplier(): https://i.imgur.com/cDDvZjw.png
Dmitry
ну значит ищи между вызовами этих двух функций
Dmitry
Register и AddPosition
Dmitry
такое чувство что у тебя задвоился xlsxwriter где то
heavycharged
вот смотри, три вызова, одинаковые до безобразия: 1. RegisterSupplier() - пишет в первый столбец 2. AddPosition() - во второй столбец 3. Save() - в третий столбец https://i.imgur.com/jDAGkdm.png
heavycharged
вот тестовый метод: https://pastebin.com/raw/wadr59se
Dmitry
ну значит не в методах проблема а в данных что в них передаются
heavycharged
ну как в данных-то? методы тупо одинаковые.
heavycharged
сам интерфейс, хз чем он может помочь правда: type ParsingResultWriter interface { RegisterSuppliers(suppliers []string) error AddPosition(sku Sku) error Save(name string) error }
heavycharged
я уже вышвырнул из методов всю логику, оставил тупо запись в разные столбцы, для дебага
heavycharged
блядь, я дебил
Fastumkruk
heavycharged
я же дергаю в тесте сохранение раньше
heavycharged
всем спасибо за помощь
heavycharged
Dmitry
Fastumkruk
Slava
никто не хочет в посёлок программистов на поучиться программированию на свежем воздухе? http://hutorium.ru/
Sebor▂▅▇█▓▒░
Там написано, что для детей)
Slava
а так же их родителей =)
🏁Александр
а можно я поеду и буду умничать с задней парты?
🏁Александр
ну позязя
🏁Александр
/me готовит плакаты "ООП для лохов" "вы не знаете на что подписались"
🏁Александр
еще пару истории для "у костра" в стиле "1 ночь для выкладки и допила в прод" 🙂
Slava
ну если не боишься опростоволоситься перед школьниками
Slava
а то дети умные нынче пошли
🏁Александр
стандартное заблуждение
Антон
стандартное заблуждение
^прямое этому доказательство
Dmitry
еще пару истории для "у костра" в стиле "1 ночь для выкладки и допила в прод" 🙂
мне вот интересно всегда. откуда такие дедлайны возникают ?
Dmitry
неужто менеджеры слова continous integration не знают ?
🏁Александр
ну в основном из за распиздяйства разработчиков и хотелок перед релизом
🏁Александр
"пацаны, завтра выкладываемся но я хотел еще этот плевый функционал..."
🏁Александр
это стандартная фраза с которой начинается треш