Евгений
воспитание епта)
это очень сильно помогает избежать ненужных проблем и конфликтов 😅
Лучше быть вежливым, если хочешь и к себе вежливости
Florian Geyer von Giebelstadt
Да.Походу установил как-то ни так
Florian Geyer von Giebelstadt
Сделал всё в точности как вчера и всё заработало нормально
Null
↘️ Golang. Выводим список всех файлов (рекурсивно) в каталоге
Читать
@Golang_google
Alexander
Alexander
иногда собираешь чтобы была совместимость под старые версии
Alexander
типа там разница в 1 метод, который ничего не делает или перенесен в другой пакет
Captain Jack Vielfrass
Alexander
ну это же вообще какая-то фигня, которая не влияет на что-то. зато потом собираешь на старом сервере, где нет докера - и пздц
Alexander
по поводу перекидывания собранных бинарников - я хз. вот даже 2 сервера разные центосы, собранный на одном не работает на другом
Alexander
сегфолты сразу
ILIA
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
но суть от этого не меняется особо. все равно же код надо писать
Alexander
эх, сегодня ощущение, что я видимо чем-то не тем занимаюсь. раз на оба вопроса сам ответил и почти нулевой отклик)
Anup
Ivan
Привет, чат!
Джобсикеры на месте? Есть отличное предложение для миддлов/миддлов+, подробности отправлю в лс
Денис
Денис
Понял, спасибо, намотаю себе на уст
Maks
Первый раз услышал но как бэ job seek
ds
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 и тд. Пока не понял, куда пихать миграции и модели
Abbos
Abbos
Александр
А токены надо в бд хранить после авторизации?
Abbos
Александр
А где потом их взять для проверки суммы из куков?
Александр
Я просто немного не понимаю, вот при авторизации мы в куки пихаем токен, чтобы потом сверять. Подскажите в кратце схему сверки
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/
Abbos
ILIA
Tarlan
ILIA
Abbos
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 и запустить, то тоже всё хорошо