Мирон
ну так это же лишнее копирование интерфейса
Maks
Че пацаны
Maks
сегодня ревьюим законодательство о призыве?:)
Maks
ууу, не гитлабовец
Мирон
О НЕТ! Вас мобилизовали! Отправь это сообщение 4 друзьям, чтобы откосить! 💸
Maks
Там есть вроде один
Maks
Закон гласит что категория годности В - только в случае военного положения призывается. Но можно призывать на военные сборы. Соответственно с этой категорией вообще не должны призывать.
Maks
Однако как на практике не известно.
Vladislav
ну так это же лишнее копирование интерфейса
интерфейс это тип и значение, в роли значения здесь выступит указатель
Vladislav
всё норм
Не ну это
О НЕТ! Вас мобилизовали! Отправь это сообщение 4 друзьям, чтобы откосить! 💸
Уже разослал. Кое как наскреб 4ех русских друзей 😡
anhckie
func (uc *ExpUC) Invoke(l logger.Interface) { ctx, cancel := context.WithCancel(context.Background()) ch := make(chan struct{}) exps, err := uc.repoExp.ListActiveExps(ctx) if err != nil { l.Error(err) } var wg sync.WaitGroup wg.Add(len(exps)) for _, value := range exps { curr, err := uc.repoCurr.ListExpCurr(ctx, value.ID) if err != nil { l.Error(err) } exp := expsStrategies[value.Name] value := value go func() { defer wg.Done() defer func() { if r := recover(); r != nil { l.Error("Recovered. Error at "+value.Name+": \n", r) } }() exp.Invoke(ctx, ch, l, curr, uc.repoCDP) // тут основная логика }() } <-ch cancel() wg.Wait() }
anhckie
// logic func (bc bc) Invoke(ctx context.Context, send chan<- struct{}, l logger.Interface, curr []entity.Curr, cdp repo.CreateCDP) { a := fiber.AcquireAgent() a.Timeout(time.Second * 3) req := a.Request() req.Header.SetMethod(fiber.MethodGet) for _, value := range curr { req.SetRequestURI(value.ExpUrl) if err := a.Parse(); err != nil { panic(err) } _, body, errs := a.Bytes() l.Error(errs) var resp APIResponse if err := json.Unmarshal(body, &resp); err != nil { panic(err) } var cr interface{} if resp.Data.Cr != 0 { cr = resp.Data.Cr } else if resp.Data.CrApproximate != "" { cr = resp.Data.CrApproximate } _, err := cdp.CreateCD(context.Background(), repo.CreateCDP{CurrID: value.ID, CS: cr}) if err != nil { l.Error(err) } select { case <-ctx.Done(): l.Info("Exp finished work as well.") case send <- struct{}{}: } } }
𝓢𝓮𝓻𝓰𝓮𝔂
Народ, а как в gin можно вручную валидацию на уже забинденную структуру натравить?
anhckie
оно работает, но хочется поправить, чтобы было ок, а то первый раз пилю свой проект
anhckie
шоб "нормально"
anhckie
то есть логика щас такая, что по крону стартую некоторую бизнес-логику, в ней с помощью паттерна стратегия подбирается необходимое поведение работы с апишками, если хотя бы одна апишка отработает и мы получим данные - остальным не надо
anhckie
типа на плейграунд?
anhckie
оно ж там не отработает, бо тут интерфейсы и блабла(
anhckie
разве что визуально чтоб читалось лучше?
Roman
Добрый день, работал кто с ed25519? message - что там может быть? публичный ключ? func Sign(privateKey PrivateKey, message []byte) []byte
Roman
спасибо
Юра (Юрий Александрович)
ну так это же лишнее копирование интерфейса
Интерфейсы всегда передаются по ссылке
Vladislav
ну так это же лишнее копирование интерфейса
там всего два поля копировать
Sweety
Можно вопрос задам? Я тут документацию к sync.Cond читаю и https://pkg.go.dev/sync@go1.19.1#Cond не понимаю зачем он нужен если по факту можно использовать канал просто и все? либо если уж совсем костыль то через атомики и какой-нибудь флаг uint32
Sweety
канал под капотом лочит мьютекс при записи и чтении в том числе + создает более грамоскую структуру чем конд
Roman
Сообщение, которое подписываете
чем сообщение может быть?
Юра (Юрий Александрович)
чем сообщение может быть?
... последовательностью байтов? Чем угодно, что представимо в виде последовательности байтов.
Илья
Я к тому, что будет производительнее - конд или канал
Cond вообще не юзает каналы под капотом
Илья
он напрямую останавливает и запускает горутины Broadcast Signal Wait
Илья
того же можно добиться с помощью каналов, но там внутренняя логика намного сложнее  и мы будем зря аллоцировать не используемые компоненты
anhckie
а можешь в на какой-то сайт закинуть?
ну типа вот так могу)) https://go.dev/play/p/mRDVUmzRSxG - главная горутина https://go.dev/play/p/2i07ZRuYNS6 - порождаемые горутины
NU
Всем привет, когда убиваю процесс, он убивает родителя, остается зомби, как его тоже замочить? Может есть ссылочки какие нибудь
NU
Имеется в виду, в гошке
Alexandr🇷🇺
Чего?
Alexandr🇷🇺
У тебя тип есть процесс, который порождает процессы, но когда ты киллишь свой процесс, то дочерние остаются?
Alexandr🇷🇺
Правильно понял?
NU
Да
Alexander
а как он убивает родителя?
Alexandr🇷🇺
а как он убивает родителя?
Очевидно сигналом
Alexander
зачем в гошке плодить процессы?
NU
Сорян, не уточнил, запускаю гошку в линуксе
Alexandr🇷🇺
зачем в гошке плодить процессы?
Мож горизонтальное масштабирование?
Alexandr🇷🇺
Всем привет, когда убиваю процесс, он убивает родителя, остается зомби, как его тоже замочить? Может есть ссылочки какие нибудь
В своей программе делай перехват и обработку POSIX сигналов. Когда пошлёшь своему процессу SIGTERM( или чем ты там убиваешь), то делай логику, что твой процесс пошлет сигналы на завершение дочерним
Alexander
Мож горизонтальное масштабирование?
так какое тут преимущество перед несколько воркеров-горутин в одном процессе?
Alexander
похоже на подход из однопоточного мира
Mark 𓁹
хотя там есть воркеры
Илья
Заново придумали grep?
при чём с меньшими возможностями
Q
доброе утро, есть у кого опыт нормализации текста для отправки SMS в кодировке gsm7?
Sergey
Заново придумали grep?
отличие одного от другого - в слове "интерактивный",
Ilya
отличие одного от другого - в слове "интерактивный",
То есть это для тех, кто не может в памяти удержать пару шагов? В чем смысл интерактивности? В шелле нажатие стрелочки вверх возвращает предыдущую команду, после которой можно написать пайп. Чем принципиально отличается от интерактивности это приложения?
Sergey
ну как пример - вы нажимаете букву и показывается список со всеми совпадениями, нажимаете еще, список меняется. И это касается не только шела. Даже с вашим примером - вводите пару букв и нажимаете вверх и будет показываться только та история, что соответствует введенному шаблону. Грепом это можно реализовать, но это не рентабельно, при каждом нажатии придется пропускать через фильтр всю последовательность не оптимальным способом. Это как сравнить поиск по строкам в текстовом файле и поиск в базе данных по индексу
Mr.
Привет всем! Товарищи, никто не сталкивался с тем, что VS code неправильно определяет GOPATH и ищет либы не там? Как решали данную проблему? Или я что то не так делаю?
Mr.
Mr.
Установил liteide даже не стал разбираться
Выглядит круто, а хоткеи вима есть?
NU
startLogFile, _ := os.OpenFile("/var/log/start.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) —-ребят подскажите почему данная строка не создает файл? она должга создать его если нет, и записать данные, он записывает только если есть файл, но если нет, то ничего не происходит(((
NU
Илья
ошибки для начала проверь
Илья
скорее всего permission denied
Null
✔️ [Golang] Ошибки, которые нельзя обработать Паника в горутине Если мы в обработчике будем использовать горутину, которая по каким-то причинам вызвала панику, Golang не сможет обработать эту панику и приложение упадет с ошибкой и все запросы, которые сейчас обрабатывает сервис оборвутся. Eсли написать примерно вот такой код type User struct { Email string } func UpsertUser(r *http.Request) (User, error) { return User{}, nil } func SendEmail(u User) { panic("sending email is not implemented") } func CreateUser(w http.ResponseWriter, r *http.Request) { user, err := UpsertUser(r) if err != nil { // handling error } go func() { SendEmail(user) // may be something else }() } То при вызове функции CreateUser сервис упадет. Для того, что бы исправить это, нужно обрабатывать паники в каждой горутине ➡️ Читать дальше @Golang_google
Mr.
Кажется, я нашел проблему, сейчас попробую решить) Если кратко: у меня GOPATH был прописан не в bashrc, а в zshrc, так как терминал в vscode запускает zsh -- там GOPATH изменился, а VS code я запускаю из Rofi и для запуска он использует bash, в котором GOPATH не изменился со стандартного. Сейчас запустил VS code из терминала и ошибка ушла
Mr.
Так что если меняете GOPATH и используете zsh -- лучше пишите GOPATH и в bash и в zsh конфиге)
NU
какой мидлвар нужен чтобы этот респонс от запроса тоже в логи записывал?
NU
стоят эти