invariance
да мне бы без указателей на указатели разобраться...
Oleg
Блин а многие в универе тупили на этой теме, гребаные указатели хД
Oleg
я сам только спустя большой такой промежуток начал понимать их хД
朝の日差し ✙
Когда моя преподавательница увидила три звёздочки, то меня больше за эту тему не трогали😂😂
Eugene
@segfauIt может поможет https://youtu.be/9Pk7xAT_aCU потом еще парочку видео материалов, статей для укрепления прочесть нужно будет
Anonymous
надо было еще между звездочками расставить const
Anonymous
:))
invariance
Спасибо)
Sol
подскажите, как правильно проверить открыт ли канал в горутине, которая в этот канал должна отправлять данные? if _, ok := <-cOrder; ok {} ждёт когда в канал что-то пошлют, что не подходит по логике
Anonymous
Канал должен быть открыт всегда, просто не закрывай его, когда нужно GC сам все уберет
Anonymous
Есть случаи когда канал закрывать нужно
Да, частные случаи есть. Но общий подход таки это не закрывать каналы, ИМХО
Kirill
подскажите, как правильно проверить открыт ли канал в горутине, которая в этот канал должна отправлять данные? if _, ok := <-cOrder; ok {} ждёт когда в канал что-то пошлют, что не подходит по логике
сделайте структуру, а в ней канал и "флажочек" closed и проверяйте его, только "прикройте" его чтоб не поломалось все при конкурентном доступе
Kirill
Да, частные случаи есть. Но общий подход таки это не закрывать каналы, ИМХО
нет общего подхода, есть разные задачи и они решаются по разному )
Sol
Канал должен быть открыт всегда, просто не закрывай его, когда нужно GC сам все уберет
ну в моём случае, если оставить канал открытым то он заблокирует отправляющую горутину до тех пор, пока не появится горутина принимающая. мне это не подходит, т.к. отправляющая горутина принимает ошибки и некоторые ошибки должна отправлять куда надо, если кто надо на месте. а если нет, то никуда не отправлять и продолжать работу не прерываясь
Sol
for a,b := range ch {} не?
а какое будет поведение при открытом канале? по-моему, так же ждать
Sol
Видимо, Я не так понял задачу :)
задача проста: есть горутина, которая принимает сообщения, которые обычно не нужны, и их просто выводят на экран. но есть сообщения со статусом ошибки, некоторые из них являются результатом действия другой горутины и эту ошибку надо бы отправить этой горутине для обработки.
Sol
Хм... а почему бы тогда в этом сообщении не добавить указатель на канал, куда отправить ответ ?
нету такой информации. в сообщении есть ID и Status, горутина которая занимается приёмом сообщений не знает чьё оно, оно просто должно при статусе ERROR отправить в канал, чтобы горутина разобралась её ошибка или не её, по ID. горутины может не быть на месте, значит ошибку сгенерировала не она, а пользователь
Sol
в любом случае вывод сообщений не должен прерываться
Sol
Т.е. переслать это же сообщений обратно отправителю, да?
не отправителю, а инициатору этой ошибки, в случае если инициатор - программа. а если не программа то просто показать на экране. инициатор запускает горутину которая что-то делает и открывает канал и ждёт сообщение. оно или ок или эррор
Sol
если держать канал постоянно открытым - то происходит блокировка до появления горутины-приёмника. либо надо делать канал с буфером, который может закончиться
Aliaksandr
советую почитать про select - https://tour.golang.org/concurrency/5
Sol
советую почитать про select - https://tour.golang.org/concurrency/5
как он поможет отправляющей в канал стороне?
Aliaksandr
select { case ch <- something: default: // cannot send to ch, do something else here }
Sol
select { case ch <- something: default: // cannot send to ch, do something else here }
если канал закрыт - то будет паника
Sol
а впрочем, если держать канал открытым то работает как мне надо. спасибо
Michael
Anonymous
что лучше юзать для парсинга конфига? меня интересует минимальное выделение памяти
Мерль
что лучше юзать для парсинга конфига? меня интересует минимальное выделение памяти
Если есть жёсткие лимиты по памяти, то лучше писать самому
Anonymous
очень жесткие
Anonymous
ну надо что на время
Anonymous
у меня уже сроки времени нет
Anonymous
для конфигов очень популярен viper но странный случай с ограничением конфига по памяти
Anonymous
если конфиг такой громадный, не лучше ли его в какойлибо из бд хранить?
Anonymous
тогда можно вычитать отдельные настройки не вычитывая его весь и это сэкономит память...
Kirill
тогда можно вычитать отдельные настройки не вычитывая его весь и это сэкономит память...
тут есть одна проблема, драйвер БД поест памяти больше чем любой парсер
Anonymous
у меня машина на 128мб озу
Kirill
что лучше юзать для парсинга конфига? меня интересует минимальное выделение памяти
а вы их как переменные окружения передавайте, а так, если по памяти все сложно, то Go это достаточно спорный выбор
Kirill
у меня машина на 128мб озу
Это очень как дофига
Kirill
возьмите https://github.com/go-yaml/yaml и не парьтесь
Anonymous
если надо работать с текстом то предложу вычитывать построчно
Anonymous
возьмите https://github.com/go-yaml/yaml и не парьтесь
зачем? есть стандартный жсон по функционалу такой же и ничего не надо со стороны брать
Anonymous
возьмите https://github.com/go-yaml/yaml и не парьтесь
господи где я согрешил прости и дай мне что другое ибо yaml это ад
Eugene
Alexander
еще такая штучка есть https://github.com/json-iterator/go
Eugene
еще такая штучка есть https://github.com/json-iterator/go
Прикольно, в нем нету генерации кода. Интересно за счет чего такой перформанс?
Anonymous
есть сравнение?
Есть посмотри видео техносферы они там проводили тесты на восьмом по-моему занятие
Anonymous
Это очень как дофига
Ты Ещё учитывай что на этом объёме работает операционная система приложению остаётся не так много
Anonymous
Да Go не самый лучший выбор когда у вас мало памяти но никто мне об этом не сказал когда начинали писать А сейчас уже выписывают но что-то другое время не особо нет
Pawel
стандартный жрет как не в себя
до фига это сколько? можно юзкейс с результатами профилирования?
Anonymous
К сожалению я уже ушёл от компьютера если не забуду проведу тесты возможно данные которые были в этом видеоролике выставили я этого не отрицаю
Pawel
если Вам не хватает 128 мб, то я сомневаюсь, что замена стандартного парсера жсон на маргинальный решит проблему. И не думаю что стандартный парсер будут кардинально меньше мозгов забирать, скорее больше проц грузить рефлексивными вычислениями.
Pawel
если действительно хотите съэкономить на сериализации конфига, binary/encoding binary/decoding Вам в помощь
Anonymous
если действительно хотите съэкономить на сериализации конфига, binary/encoding binary/decoding Вам в помощь
Идея неплохая но проблема в том что конфиг надо руками править если бы не это обстоятельство Я бы прямо в бинарник записывал
Pawel
у меня кстати в проде крутится сервис на Малинке с 256 мб, полёт нормальный, проблем с парсером жсон нет. при этом ось может и 200 мб отжирать
Anonymous
сделать фронтенд для правки конфига?
Нет этого я делать не буду потому что конфигурацию надо максимально редактируемые сделать
Nikita
Вы вообще бредом занимаетесь. Сначала сделайте что-то, чтобы работало, а если памяти будет не хватать, уже и заниматесь оптимизацией.
Anonymous
Так что только текст
Kirill
https://github.com/mailru/easyjson
У нас оказалось медленнее чем без него, не знаю почему
Eugene
интресно :)
Anonymous
какая ОС кстати?
linux x64 kernel 3.16
Kirill
это ядро и достаточно старое
Pawel
linux x64 kernel 3.16
разве она не умеет swap-ить диск при нехватке памяти?