🎉
Есть база, есть структура для этой базы. Есть функции которые пишут в базу и читают из неё. Есть как минимум три повторяющиеся функции, для апдейта одного из полей этой базы. Две из них отличаются лишь типами. Вот сижу и думаю как дальше действовать. 1. Сделать функции записи, селекта, апдейта методами структуры, упихать три повторяющиеся функции в интерфейс. 2. Оставить как есть. 3. Что-то ещё.
Slach
создавая соединение с бд, ты же знаешь что прописываешь в dsn
прописываю не я ;) я могу только провалидировать через dburl какой нибудь но вытащить проблема потому что понятие БД оно РАЗНОЕ для разных СУБД там где процесс на коннект есть БАЗА в коннекте + СХЕМЫ для имен таблиц там где тред на коннект есть много БАЗ а во всяких кластерных есть КЛАСТЕР.БАЗА
Artem
Мб, потому, что встраиваются структуры, а делегируется вызовы методов?
нет, встраиванием в том числе называется указание ссылки на функцию в структуре, а это в чистом виде делегирование
Anonymous
Есть база, есть структура для этой базы. Есть функции которые пишут в базу и читают из неё. Есть как минимум три повторяющиеся функции, для апдейта одного из полей этой базы. Две из них отличаются лишь типами. Вот сижу и думаю как дальше действовать. 1. Сделать функции записи, селекта, апдейта методами структуры, упихать три повторяющиеся функции в интерфейс. 2. Оставить как есть. 3. Что-то ещё.
Mikhail
filepath.Walk(path, func(path string, info os.FileInfo, err error) error { if incompleteRegxp.MatchString(path) { if aacRegxp.MatchString(info.Name()) { if info.ModTime().Before(currentTime) { os.Remove(path) counter++ } } } return nil }) Это можно как то *красиво * написать?
Mikhail
я понял, норм код.
Ivan
ну вложеность ифов не оч хорошо
Alexander
да, все условия не обязательно в одну строчку. Можно переносить
Ivan
if !incompleteRegxp.MatchString(path) { return } if !aacRegxp.MatchString(info.Name()) { return }
Ivan
хотя бы так
Alexander
filepath.Walk(path, func(path string, info os.FileInfo, err error) error { if incompleteRegxp.MatchString(path) && aacRegxp.MatchString(info.Name()) && info.ModTime().Before(currentTime) { os.Remove(path) counter++ } return nil })
Ivan
valid := ncompleteRegxp.MatchString(path) && aacRegxp.MatchString(info.Name()) && info.ModTime().Before(currentTime) if valid
Anonymous
Нужно голосование, какой вариант самый красивый 😃
Ivan
ломает чувство прекрасного смотреть 10 строчек с && и фиг пойми на что вообще условие
Mikhail
главное что мой вариант не говнокод)
Mikhail
я ж начинающий писатель на го
Anonymous
Дерево наверное строит)
Mikhail
а что вы пытались решить?
раз в час(к примеру) удалять файлы из определенной дирректории
Mikhail
которые не изменялись в течении часа)
Илья
ломает чувство прекрасного)
но это помоему самый goway
Mikhail
но это помоему самый goway
на самом деле это самый читабельный вариант)
🏁Александр
странная задача конечно
🏁Александр
вы не ротацию логов случаем делаете?
Mikhail
странная задача конечно
нет, стримрипер тащит треки с 10-ка радиостанций, и срет в incomplete директорию. Место на винте не резиновое, вот раз в час сносятся лишние файлы)
🏁Александр
быстрее было бы сделать map и там хранить время когда кинули, переодически скидывая в локальную бд
🏁Александр
или таймеры вообще выставить
Anonymous
Самое время переписать этот стримрипер на Go!
Mikhail
Самое время переписать этот стримрипер на Go!
не забудь поделиться результатами 😉
Anonymous
не забудь поделиться результатами 😉
Соре, я сам пишу своё радио, но оно с файлами песенок работает, а не со стримами ))
Mikhail
удачи)
🎉
Есть какие-нить правила хорошего тона описывать структуру кода? Например: package ... import ... type ... struct {} var global *bla.Bla type ... interface {} func 123 () {} func 234 () {} main(){}
🎉
gofmt знаю, оч удобно, go tool vet вот это посмотрю, спасибо.
🎉
Я бы main поставил после объявлений типов
Я вот не помню, а в Си вроде в конце файла main ставится, это как-то связано с объявлениями функций...
Мерль
А смысл?
В main обычно расположен самый высокий уровень логики, можно быстро прикинуть что пакет делает
Vasily
сборщик разных линтеров для го
Vasily
будет держать вас в ежовых рукаицах
🎉
Спасибо.
Mikhail
Есть какая то полноценная либа для телеги на го?
Victoria
Добрый день! Ребята, прошу прощения, что не по теме - возможно подскажите где можно поискать классных как вы спецов на Голанг
Vasily
Mikhail
https://github.com/go-telegram-bot-api/telegram-bot-api
это лучшая из всех? или первая в гугле? 😊
Vasily
то чем пользовались
Vasily
она в общем работает :)
Denis
Василий, смотрел Ваш курс на Coursera. Respect, очень доступно и полезно
Alexey
https://github.com/bot-api/telegram ещё
Mikhail
она в общем работает :)
это отличное качество, на мой взгляд 😊
Vasily
Василий, смотрел Ваш курс на Coursera. Respect, очень доступно и полезно
Спасибо. Скоро 2-я часть выйдет где галопом по европам пробежимся по куче частых задач в го
Roman
Спрошу и тут
Roman
А вот как мне сконвертировать какой-то регион памяти в слайс?
🎉
она в общем работает :)
Да, щас на ней пишу, параллельно изучая го.
Mikhail
https://github.com/tucnak/telebot А этим пользовался кто?
Sebor▂▅▇█▓▒░
в соседнем чате видел такое: https://freelansim.ru/tasks/189825 для тех, кто хочет попрактиковаться в го и заодно сделать либу)
🄽🄸🄺🄸🅃🄰
Котаны, а много ж кто на Гоконф идёт, да?
Я иду. Ну тот который вот скоро
Andrey
👍
John
может кто делал stream channel какой между аэроспайком и го приложением? возможно ли это? хочу держать канал открытым, и когда появится значение удовлетворяющее выборке возвращать его и закрывать канал. можно и polling, однако интересует можно ли стримом
John
Protobuf gRPC смотрели?
ну он и используется, только в плане взаимодействия микросервисов и клиента, но к самой бд не знаю как его прикрутить и возможно ли
🄽🄸🄺🄸🅃🄰
Если бд клиент протокол поддерживает, то все просто, если нет, пишите клиент))
🄽🄸🄺🄸🅃🄰
Это же гошечка)
🄽🄸🄺🄸🅃🄰
Так-то я могу не правильно задачу понимать, ибо с аэроспайком опыта нет
John
Так-то я могу не правильно задачу понимать, ибо с аэроспайком опыта нет
ну тут в любом случае что-то или с протоколом или на луа походу надо писать, буду ковырять