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 и чтение кончается, как я и писал. но вот если у тебя до разделителя строки больше дефолтного буфера (тут исходники смотреть), то тоже чтение остановится
DI
Alexander
так а чего ты читать откуда хочешь? это ж не udp, где данные потоком льются. должно быть какое-то обозначение конца данных или их длины
Ivan
а решение "влоб" чем не подходит?
Ivan
ну тоесть conn.Read(buf)
Alexander
потому что надо как-то правильно по особому
Ivan Kalinin
Решил, файл был не формата db, sqliteStudio по какой причине создает безформатный файл ДБ поэтому sql.Open не может его обнаружть. А почему создает пустой файл дб с таким же именем - загадка
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 сервера" - почему нет? зато потом можно мокать спокойно базу
L
Alexander
фундаментальной разницы нет
Ivan
как прокидывание инстанса дб решается контекстом?
Alexander
можно в контекст запихать
Ivan
и прокидвать не бд, а контекст с дб) ну такое
L
не переписывать же все функции с добавлением параметра
L
и громоздко когда столько тащишь за собой
DI
Ivan
ну так значит ни чего не нужно прокидывать, а создать там где это нужно
L
Предложили еще сделать структуру над Echo и туда полем пихнуть бд
Ivan
ты сделаешь что-то вроде
db := NewDB
service1:= NewService(db)
service2:= NewService2(db)
app := newApplication(service1,service2)
app.Run()
Влад
L
Влад
Handler обращается к сервису (usecase), у сервиса есть репозиторий, репозиторий - обертка через структуру над твоим драйвером твоей конкретной бд
Влад
DI через Uber Fx
Влад
https://youtu.be/LDGKQY8WJEM
Влад
Но это уже для проектов со сложным графом зависимостей
🅞leksiy
Дофига ж у вас времени, а я в мейне db объявляю, все четко работает и проблем нет 😂
Ivan
глобально?
🅞leksiy
🅞leksiy
Вообще понятно, что все от проекта зависит. Не везде это будет норм и красиво. Но и на простеньких срочных проектах сильно заморачиваться не вижу смысла
Emil
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 тоже видел. вроде прикольно будет
Herman
ай с генереками неинтересно
Herman
где там их еще нет?
Влад
про бодание "оверинжиниринг и bloatware" vs "технический долг" можно бодаться бесконечно, разговоры о напасах и лирика. Разумеется нужен контекст.
Emil
Herman
Herman
просто я как вспоминаю, какие у нас темы были дипломов
Herman
бредятина абсолютное, это можно потом сразу же на мусорку
Herman
а вот что-то серьезное только один чел сделал, какой-то vpn интересный, но ему еще пришлось припотеть, чтобы доказать ценность этого проекта
Herman
а простой CRUD (еще и не рабочий) - это классная тема, по мнению преподов
🅞leksiy
Herman
Почему?)
не придется теперь писать поиск по слайсу))
🅞leksiy
Аххах, самое интересное отбирают
Ivan
его сразу завезут с стандарт го?
🅞leksiy
Да
🅞leksiy
Это ж теперь новичков можно будет в это тыкать носом. "Да ты пороха не нюхал, щенок"
Ivan
поиск по ид, поиск по имени...
Ivan
а ide уже поддерживают какие-то? джинерики
Norx
🅞leksiy
Goland вроде тоже, но он у меня криво почему-то работает в целом, я его снес
🅞leksiy
Это тоже
Raniqubihe
Скиньте пож стикер в прод
Emil
Alexander
Emil
Вот это предъява
Ilnur
это небинарный палец
Влад
https://www.youtube.com/watch?v=G8lptDqPP-0
Влад
Влад
справа внизу еще
Emil
Сомневаюсь, что проблема в поле оратора. Видел и мужские доклады на стремные фронт либы
Ivan
а код ревью
Ivan
кто-то же пропустил такой код на доклад и в прод