DI
и какое решение?
input := bufio.NewScanner(conn) for input.Scan() { data := input.Bytes() } Пока такое, но пока не протестировал А вообще, если есть какой то ресурс, который освещает стандарт на русском, буду рад
Alexander
Scanner provides a convenient interface for reading data such as a file of newline-delimited lines of text. Successive calls to the Scan method will step through the 'tokens' of a file, skipping the bytes between the tokens. The specification of a token is defined by a split function of type SplitFunc; the default split function breaks the input into lines with line termination stripped. Split functions are defined in this package for scanning a file into lines, bytes, UTF-8-encoded runes, and space-delimited words. The client may instead provide a custom split function. Scanning stops unrecoverably at EOF, the first I/O error, or a token too large to fit in the buffer. When a scan stops, the reader may have advanced arbitrarily far past the last token. Programs that need more control over error handling or large tokens, or must run sequential scans on a reader, should use bufio.Reader instead.
Alexander
"the default split function breaks the input into lines with line termination stripped." "Scanning stops unrecoverably at EOF, the first I/O error, or a token too large to fit in the buffer." - "or a token too large to fit in the buffer."
Alexander
короче это ж для чтения текста, разделенного переносами строки. и как бы тут хорошо в твоем случае, что EOF и чтение кончается, как я и писал. но вот если у тебя до разделителя строки больше дефолтного буфера (тут исходники смотреть), то тоже чтение остановится
Alexander
так а чего ты читать откуда хочешь? это ж не udp, где данные потоком льются. должно быть какое-то обозначение конца данных или их длины
Ivan
а решение "влоб" чем не подходит?
Ivan
ну тоесть conn.Read(buf)
Alexander
потому что надо как-то правильно по особому
DI
так а чего ты читать откуда хочешь? это ж не udp, где данные потоком льются. должно быть какое-то обозначение конца данных или их длины
Это в принципе я туплю. Там просто текстовые данные будут передаваться. Могу и в одну строку все запихнуть Но хотелось как то не пологаться на это
Ivan Kalinin
Решил, файл был не формата db, sqliteStudio по какой причине создает безформатный файл ДБ поэтому sql.Open не может его обнаружть. А почему создает пустой файл дб с таким же именем - загадка
DI
ну тоесть conn.Read(buf)
А как, если не знать длину передаваемых данных?
Alexander
Это в принципе я туплю. Там просто текстовые данные будут передаваться. Могу и в одну строку все запихнуть Но хотелось как то не пологаться на это
понятно. все равно надо как-то знать сколько читать или докуда читать. ты можешь отправить n байт, сделать буфер на n байт, но это не значит, что за одно чтение у тебя всегда n байт прочитается
L
Созрел такой вопрос концептуальный. Вот у меня есть приложение на гошке Там: 1) http server 2) допустим телеграмм бот (назовем бот-клиент) 3) какая то БДшка, допустим mysql первые два сервиса инициализирую в main, как отдельные горутины работают. Через http можно какие то команды/настройки боту давать, http сервер должен иметь доступ к БД и к самому боту-клиенту Бот-клиент тоже должен иметь доступ к БД Теперь вопрос: как организовать структуру приложения, если учесть тот факт, что глобальные переменные по мнению многих считаются злом. Ну то есть мне не хочется в main пакете инициализировать бд и прокидывать ее во всех вызовах по нисходящей в функциях бота-клиента и http сервера И то же самое по поводу бота-клиента для http сервера, как получать его актуальный объект, опять же не прокидывать же во все ручки
L
По структуре приложение будет похоже на это
L
https://github.com/glebnaz/go-platform-hello-world
Alexander
"Ну то есть мне не хочется в main пакете инициализировать бд и прокидывать ее во всех вызовах по нисходящей в функциях бота-клиента и http сервера" - почему нет? зато потом можно мокать спокойно базу
Alexander
фундаментальной разницы нет
Ivan
как прокидывание инстанса дб решается контекстом?
Alexander
можно в контекст запихать
Ivan
и прокидвать не бд, а контекст с дб) ну такое
L
и прокидвать не бд, а контекст с дб) ну такое
ну вот допустим надо будет прокидывать не только бд, а клиента бота еще в http сервер
L
не переписывать же все функции с добавлением параметра
L
и громоздко когда столько тащишь за собой
Alexander
не переписывать же все функции с добавлением параметра
на самом деле такой подход удобен тем, что видно где используется бд, а где нет
Ivan
ну так значит ни чего не нужно прокидывать, а создать там где это нужно
L
Предложили еще сделать структуру над Echo и туда полем пихнуть бд
Ivan
ты сделаешь что-то вроде db := NewDB service1:= NewService(db) service2:= NewService2(db) app := newApplication(service1,service2) app.Run()
Влад
Созрел такой вопрос концептуальный. Вот у меня есть приложение на гошке Там: 1) http server 2) допустим телеграмм бот (назовем бот-клиент) 3) какая то БДшка, допустим mysql первые два сервиса инициализирую в main, как отдельные горутины работают. Через http можно какие то команды/настройки боту давать, http сервер должен иметь доступ к БД и к самому боту-клиенту Бот-клиент тоже должен иметь доступ к БД Теперь вопрос: как организовать структуру приложения, если учесть тот факт, что глобальные переменные по мнению многих считаются злом. Ну то есть мне не хочется в main пакете инициализировать бд и прокидывать ее во всех вызовах по нисходящей в функциях бота-клиента и http сервера И то же самое по поводу бота-клиента для http сервера, как получать его актуальный объект, опять же не прокидывать же во все ручки
Гугли примеры по clean architecture, выбирай тот что нравится больше. То что тебя волнует называется dependency injection.
Влад
Handler обращается к сервису (usecase), у сервиса есть репозиторий, репозиторий - обертка через структуру над твоим драйвером твоей конкретной бд
Влад
DI через Uber Fx
Влад
https://youtu.be/LDGKQY8WJEM
Влад
Но это уже для проектов со сложным графом зависимостей
🅞leksiy
Дофига ж у вас времени, а я в мейне db объявляю, все четко работает и проблем нет 😂
Ivan
глобально?
🅞leksiy
Вообще понятно, что все от проекта зависит. Не везде это будет норм и красиво. Но и на простеньких срочных проектах сильно заморачиваться не вижу смысла
George
Вообще понятно, что все от проекта зависит. Не везде это будет норм и красиво. Но и на простеньких срочных проектах сильно заморачиваться не вижу смысла
YAGNI, KISS и тому подобные. Код должен решать задачу. Реальную или ту, которая скоро станет таковой (без "может"). Использование разного рода паттернов просто потому что их можно применить - антипаттерн.
Null
Golang-дайджест № 12 (1 – 31 декабря 2021) https://habr.com/ru/post/599861/ @Golang_google
Null
Пример криптографии на GOLANG https://uproger.com/primer-kriptografii-na-golang/ @Golang_google
Влад
Вообще понятно, что все от проекта зависит. Не везде это будет норм и красиво. Но и на простеньких срочных проектах сильно заморачиваться не вижу смысла
Если в философии "всё зависит от определения", то в разработке софта - "все зависит от задач". Та же чистая архитектура, слабая связность и управление зависимостями решают конкретные задачи, задачи были озвучены чуваком выше.
Ivan
про any тоже видел. вроде прикольно будет
🇷🇺 Vladimir
Пример криптографии на GOLANG https://uproger.com/primer-kriptografii-na-golang/ @Golang_google
это же шифр цезаря. я это в школе писал на бейсике в 90х. а настоящих примеров нет? чтоб ассиметрично там как-нить хотя бы, ну как у нормальных пацанов.
Herman
ай с генереками неинтересно
Herman
где там их еще нет?
Влад
про бодание "оверинжиниринг и bloatware" vs "технический долг" можно бодаться бесконечно, разговоры о напасах и лирика. Разумеется нужен контекст.
Emil
это же шифр цезаря. я это в школе писал на бейсике в 90х. а настоящих примеров нет? чтоб ассиметрично там как-нить хотя бы, ну как у нормальных пацанов.
Есть либа по шифрованию на алгебраических решетках квантовая (думал по такому писать диплом, но испугался математики)
Herman
просто я как вспоминаю, какие у нас темы были дипломов
Herman
бредятина абсолютное, это можно потом сразу же на мусорку
Herman
а вот что-то серьезное только один чел сделал, какой-то vpn интересный, но ему еще пришлось припотеть, чтобы доказать ценность этого проекта
Herman
а простой CRUD (еще и не рабочий) - это классная тема, по мнению преподов
Herman
Почему?)
не придется теперь писать поиск по слайсу))
🅞leksiy
Аххах, самое интересное отбирают
Ivan
его сразу завезут с стандарт го?
🅞leksiy
Да
🅞leksiy
Это ж теперь новичков можно будет в это тыкать носом. "Да ты пороха не нюхал, щенок"
Ivan
поиск по ид, поиск по имени...
Ivan
а ide уже поддерживают какие-то? джинерики
🅞leksiy
а ide уже поддерживают какие-то? джинерики
VS Code да, надо go tools только обновить
🅞leksiy
Goland вроде тоже, но он у меня криво почему-то работает в целом, я его снес
🅞leksiy
Пример криптографии на GOLANG https://uproger.com/primer-kriptografii-na-golang/ @Golang_google
На uproger бесят автоматические переносы в коде. На телефоне код не читаемый, уж лучше горизонтальная прокрутка в блоке кода была бы
🅞leksiy
Это тоже
Raniqubihe
Скиньте пож стикер в прод
Emil
Alexander
Второй принцип солида
неплохо, неплохо
Emil
Вот это предъява
Ilnur
это небинарный палец
Влад
https://www.youtube.com/watch?v=G8lptDqPP-0
Влад
Влад
справа внизу еще
Emil
Сомневаюсь, что проблема в поле оратора. Видел и мужские доклады на стремные фронт либы
Ivan
а код ревью
Ivan
кто-то же пропустил такой код на доклад и в прод