Евгений
воспитание епта)
это очень сильно помогает избежать ненужных проблем и конфликтов 😅 Лучше быть вежливым, если хочешь и к себе вежливости
Денис
видимо дело в курсе))
И по Java и по Go были курсы бесплатные на Stepik
Florian Geyer von Giebelstadt
Да.Походу установил как-то ни так
Florian Geyer von Giebelstadt
Сделал всё в точности как вчера и всё заработало нормально
Null
↘️ Golang. Выводим список всех файлов (рекурсивно) в каталоге Читать @Golang_google
Captain Jack Vielfrass
↘️ Golang. Выводим список всех файлов (рекурсивно) в каталоге Читать @Golang_google
Но разве io.utils не признан deprecated, и заместо него лучше бы использовать os.ReadDir? https://go.dev/doc/go1.16
Alexander
иногда собираешь чтобы была совместимость под старые версии
Alexander
типа там разница в 1 метод, который ничего не делает или перенесен в другой пакет
Alexander
ну это же вообще какая-то фигня, которая не влияет на что-то. зато потом собираешь на старом сервере, где нет докера - и пздц
Alexander
по поводу перекидывания собранных бинарников - я хз. вот даже 2 сервера разные центосы, собранный на одном не работает на другом
Alexander
сегфолты сразу
ILIA
Собирал бинарь на одной машине - перекидывал, работало)
Alexander
нет, оно просто так сегфолтилось не запускаясь
Captain Jack Vielfrass
ну это же вообще какая-то фигня, которая не влияет на что-то. зато потом собираешь на старом сервере, где нет докера - и пздц
С учетом того, что можно поставить локальную версию go, без рута(как у меня и сделано на одном серве), пытаться сохранить совместимость это не очень рационально. Да, возможно именно библиотека io.utils не будет меняться и каких либо багов/уязвимостей в ней не появится, но будет трудно контролировать чтобы все внешние зависимости в проекте тоже поддерживали обратную совместимость. Мне например, пришлось перекатиться с go1.15 на go1.16, из за sqlite и его бед с cgo. Тем более, то же обновление с дженериками полностью сломает старый код.
Alexander
а зачем склайт на сервере?
Captain Jack Vielfrass
Для удобной портативной бд.
Captain Jack Vielfrass
Я телеграм бота пилил
Alexander
Кстати, кто на прям трушных трушных микросервисах сидит. вот есть у вас 2 сервиса: юзеры и подписки. Приходит от бизнеса задача подсчитать сколько юзеров из Анголы с именем Стас имеют трижды платиновую подписку уже второй год. Что вы делаете? Пишете скрипт, который все это рядом запросов пытается слинковать?
Anonymous
rpc CheckUsersSubscription(Users) returns (SubscriptionYear) ну а потом реализация этого рпс message Users { repeated users = 1; }
Alexander
ну это же и самому делать надо, и считаться будет долго
Alexander
а так, один запрос - и готово
Anonymous
мой вариант тоже базируется на одном запросе
Anonymous
не понял тебя
Alexander
понятно, что во вконтактах каких целые аналитические субд с дублированием каких-то данных и тд. но сейчас методология трушных микросервисов и средних проектах используется
Alexander
мой вариант тоже базируется на одном запросе
нет. у тебя надо сначала юзеров найти по одному условию, а потом пачками их скармливать подписочной базе или микросервису подписок
Alexander
а тут можно один скл запрос с джойнами лупануть и отдать результат достаточно быстро
Anonymous
приходит айдишник юзеров джоином делаешь и все
Anonymous
где тут пачка запросов я не знаю
Alexander
приходит айдишник юзеров джоином делаешь и все
а если 1М айдишников? ты тоже в 1 пачку все запихнешь?
Alexander
но суть от этого не меняется особо. все равно же код надо писать
Alexander
эх, сегодня ощущение, что я видимо чем-то не тем занимаюсь. раз на оба вопроса сам ответил и почти нулевой отклик)
Ivan
Привет, чат! Джобсикеры на месте? Есть отличное предложение для миддлов/миддлов+, подробности отправлю в лс
Денис
Понял, спасибо, намотаю себе на уст
Maks
Первый раз услышал но как бэ job seek
Grigorij
расскажешь потом че там за трап
Alexander
ну вот, о job sicker'ах никто не думает(
Vitaly
кто-нибудь использует rabbitmq на go? много у вас проблем с ним было? с реконнектами, с чем-то еще?
leejoys
привет! кто с go-pg знаком, подскажите, там работает релейшен has one non pk или нет? делал всё, как в тестах у них написано, а в итоговом запросе всё равно по pk таблицы джойнит. теперь осталось понять - это только у меня, или оно там вообще не работает?
ILIA
https://habr.com/ru/company/quadcode/blog/662852/ Может кому полезно будет
Tony
Подскажите, почему ошибки нулевая, когда sqlite нет на машине и файла базы нет рядом с программой?
Tony
package sqlite import ( "database/sql" "log" _ "github.com/mattn/go-sqlite3" ) func ConnectSqlite(dbname string) (db *sql.DB) { db, err := sql.Open("sqlite3", "mydb.db") if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") return db }
Tony
Ошибка nil
Tony
Должно же ругаться 🤬
Tony
А это только создание ?
Tony
А как указать место sqlite библиотек? Или лучше кинуть всё в папку с программой?
Tony
Что-то не могу найти инфу
Tony
Спасибо
Tony
Так же читаю всякие схемы иерархии проекта - кто что советует, кто MVC, кто-то наоборот против категорически. Остановился на CMD internal pkg Внутри CMD папка с проектом и в ней только main.go В pkg создаю папки по общим библиотекам, типа вот этого клиента для sqlite, а в internal папки тн сущностей, типа user и тд. Пока не понял, куда пихать миграции и модели
Александр
А токены надо в бд хранить после авторизации?
Александр
А где потом их взять для проверки суммы из куков?
Александр
Я просто немного не понимаю, вот при авторизации мы в куки пихаем токен, чтобы потом сверять. Подскажите в кратце схему сверки
Herman
Я просто немного не понимаю, вот при авторизации мы в куки пихаем токен, чтобы потом сверять. Подскажите в кратце схему сверки
Каждый раз проверяется подпись. Если все норм, то данные из токена = данные юзера условно
Tarlan
такой вопрос на пайтоне гет запрос с авторизацией делается примерно так response = requests.get('http://example', timeout=(3, 3), auth=HTTPDigestAuth('root','root')) на go делаю так ` client := &http.Client{} req, _ := http.NewRequest("GET", "example", nil) req.SetBasicAuth("root", "root") resp, _ := client.Do(req) ` Вы даёт ошибку - 401 Unauthorized как правильно делать эти get запросы
Herman
А откуда берется сумма для сверки?
В jwt три части, одна из них описывает какой мы алгоритм используем, во второй данные, в третьей подпись. Вот надо проверить эту подпись
Herman
Если речь о приватном ключе, то его надо как-нибудь в приложение подсовывать
Александр
А подпись то одна из куки, а эталонная как бы откуда?
Herman
А что значит эталонная подпись?
Herman
https://habr.com/ru/post/340146/
Tarlan
попробуй добавить протокол http:// игнорить ошибки плохая практика
ошибки убрал, чтобы здесь текста меньше было а коде оставляю с проверками http:// использую ошибка именно в авторизации ` <head> <title>401 Unauthorized</title> </head> <body> <h1>401 Unauthorized</h1> </body> `
Tarlan
В браузере авторизация проходит? А то может у вас пароль не верный
проходит + на пайтоне проходит request.get запросы
Tarlan
посмотри либу goquery
сейчас глянем, спасибо
Maks
А подпись то одна из куки, а эталонная как бы откуда?
в жвт на сервере есть ключ шифрования, который шифрует сам токен. В пейлоад есть часть которую можно расшифровать и получить нужные данные, так как она просто в base64. Так же есть эта же часть но зашифрованная ключем который был сгенерирован сервером. В момент запроса проверяется, будет ли пейлоад иметь тот же секрет, что прислал клиент. Если нет - значит токен не валиден. ЖВТ позволяет избежать того, что нужно каждый раз ходить в базу и проверять пароль. Но он не спасет если ты хочешь оперативно менять пользователю пароль или права доступа. ЖВТ технология хорошая и довольно простая. Там можно например хранить даже роли пользователя, что бы в базу не ходить. И на клиенте используя эти роли отрисовывать контент в SPA. А на сервере проверять доступы пользователя. Но опять же, смена ролей не происходит мгновенно в случае с жвт. Либо придется всё равно ходить в базу и проверять что то. Смысл жвт изначально был в том что бы базу не дергать на каждый запрос для проверки юзера.
Tony
func ConnectSqlite(dbname string) (db *sql.DB) { db, err := sql.Open("sqlite3", "mydb.db") if err != nil { log.Println("err") panic(err) } err = db.Ping() if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") return db }
Tony
err = db.Ping() тоже err = nil
Tony
если создать exe и запустить, то тоже всё хорошо