Anonymous
в смысле?это как?
Наверно он имел ввиду, что mutex на чтение не использован тут.
Oleh
я пробовал с мютексом, он не решает func NewGuardian(phrases []WeightedPhrase, maxWeight int) *Gurdian { return &Gurdian{MaxWeight: maxWeight, Phrases: phrases} } через вот это инициализыровал структуру фразы приходят в функцию
Oleh
я забыл передать в инит функции Gurdian в структуру которая его использовала
Sergius Ofitserov
Инициализацию функции попробуй завершить
Oleh
уже решил спасибо
Sergius Ofitserov
👍
Slava
так вон как го популярен в Китае, конечно пора китайский учить
Заур
Мне эта тенденция не очень нравится, в плане ещё китайский надо подтягивать
Заур
Офф док vue js на китайском вроде, потом с китайского на англ переводят
Заур
Со временем китаеязычных технологий только больше будет
O
Офф док vue js на китайском вроде, потом с китайского на англ переводят
Ну вью там рынок занял, но доки англ всегда актуальные.
Slava
Со временем китаеязычных технологий только больше будет
главное чтобы языки программирования с китайским вместо английского не стали появляться и популяризироваться, а то совсем взвоем
Заур
Вон на голанге уже можно в принципе на китайском писать 😁
Vasily
в го, кстати, можно функции/типы/переменные на любом языке называть
Roman
в го, кстати, можно функции/типы/переменные на любом языке называть
Братцы, давайте же тогда фреймворк православный напишем.
Slava
Братцы, давайте же тогда фреймворк православный напишем.
миддлвейр для авторизации, называться будет выктотакиеяваснезвалидитенахуй
Slava
так православная либа же
Lee
Ну в смысле Vyktotakieyavasnezvaliditenhuy
Slava
а, эт да
Lee
А то на гитхаб не выложишь
Anonymous
/voteban
Daniel
как скажете
Mikhail
Есть ли способ сделать это лаконичнее?
Эмин
Зачем вам блок элсе?
Mikhail
Зачем вам блок элсе?
точно, это лишнее)
Эмин
Ну и ошибку ты возвращать
Эмин
Бы*
Mikhail
Бы*
Зачем? Это в принципе точка входа, если функция не вернет workDir, работать не должно
Эмин
Слишком много ответоственности
Эмин
Эта функция, на мой взгляд, должна вернуть либо ворк дир, либо ошибку. А выходить из системы или нет нужно выше. И предусмотреть все выходы из системы в одном месте желательно
Эмин
Ещё стоит проверить что writable
Bob Ef
А зачем дополнительные проверки если и Open и Readdir и так возвращают коды ощибок
Bob Ef
по мне так сразу начинать работать с путем(каталогом) без всяких проверок
Andrei 🦉
Есть ли способ сделать это лаконичнее?
заменить комбинацию printf и os.exit на log.fatal
Andrei 🦉
как бонус появится по крайней мере один адекватный уровень логирования
Mikhail
по мне так сразу начинать работать с путем(каталогом) без всяких проверок
я изучаю язык и его возможности. иду маленькими шагами 😊
Mikhail
И вообще, есть flag же 😊
hypnopumpia
Пытаюсь установит cgzip, он ругается на отсутствие zlib, который установлен. Как починить?
Daniel
zlib-dev какой-нибудь нужен
hypnopumpia
zlib-dev какой-нибудь нужен
Сработало, спасибо.
Anonymous
Всем прив. Надо пачку своих прог при загрузке запускать. Это можно в одном юните для systemd прописать или разные надо?
Daniel
Лучше разные
hypnopumpia
Как правильно работать с трейлерами? Пробую по примеру из документации, но пока пустота. https://codeshare.io/5Z7MKX
hypnopumpia
Выкурил больше документации, чтобы появились хедеры нужно сначала полностью прочитать тело ответа.
Mikhail
execErr := syscall.Exec(binary, args, env) if execErr != nil { panic(execErr) } Я правильно понимаю, что пока binary не 'отработает\вывалится в ошибку', поток выполнения программы не продолжится?
Alexander
А почему должен продолжится, если ты в той же горутине выполняешь?
Андрей
народ. доброго времени суток, появилась необходимость написать crm типичная задача, учет товара склада , логистика... накладные , приход..расход, может кто подсказать туториалы..как ее вообще проектировать?
Андрей
с какой стороны подойти , так сказать
Mikhail
func main() { for _, arg := range args { go RunBinary(binary, arg, env) } } func RunBinary(binary string, args []string, env []string) { execErr := syscall.Exec(binary, args, env) if execErr != nil { RunBinary(binary, args, env) } } Правильный ли это способ перезапуска упавшей горутины?
Andrei 🦉
нет https://github.com/golang/go/issues/15304
Andrei 🦉
при большом количестве падений у тебя отвалится вся программа
Andrei 🦉
оберни это все в бесконечный for
Andrei 🦉
вместо рекурсивного вызова
Mikhail
for { execErr := syscall.Exec(binary, args, env) } Примерно так?
Andrei 🦉
да, и выход из цикла при err == nil
Mikhail
да, и выход из цикла при err == nil
горутина должна работать до талого. Утилита будет по ctrl+c закрываться
Mikhail
да, и выход из цикла при err == nil
или я не совсем понимаю
Andrei 🦉
значит этого кода достаточно)
Mikhail
значит этого кода достаточно)
Спасибо. Продолжу пожалуй 😊
Андрей
мой вопрос остался без ответа:(
Andrei 🦉
мой вопрос остался без ответа:(
тебе нужен другой язык
Andrei 🦉
развернутую бизнес логику на нем писать - та еще боль
Андрей
Мне понять как проектировать сначало надо, написать могу, что на го, что на flask, либо смешать, не суть,важно, важно сейчас спроектировать это все
Андрей
Вопрос откуда копать
Андрей
@repentant_gopher. Мне по проетированию инфа нужна ...
Андрей
Как это все сделать правильно
Mikhail
https://gist.github.com/meehalkoff/bdc2bd1b3a117990903579c2bfc33b72 что то все же идет не так у меня с горутинами 😞
Андрей
Кстати можно ввиде апи сделать, а потом на js веб морду натянуть на нее, но опять таки, суть в том, как спроектировать
Mikhail
что за ошибку выдает?
без ошибок, просто запускает рандомно один экземпляр streamrippera
Andrei 🦉
пологируй ошибки запуска syscall.Exec, возможно streamripper просто не хочет запускаться более чем в одном экземпляре
Andrei 🦉
ну и всегда можно более полно контролировать процесс запуска сторонней утилиты с помощью exec.Command