Антон
Антон
но держусь, рою, вот совета прошу)
Andrey
ну мне сложно так гадать на кофейной гуще, хотя бы потому что я кофе выпил а гущи там не оказалось, но попытаться поугадывать можно, например ты можешь не обрабатывать урл на который уходит запрос, потом если урл ты обработал ты можешь из боди неправильно доставать, можно попробовать вывести в консоль боди посмотреть что там где лежит, если получилось достать, то что бы передать обратно в форму нужно прокинуть в шаблон переменную и установить ее в нужный текст
Andrey
я уже сто лет не работал с html формами, можешь попробовать поменять post на get и тогда в строке браузера будет видно на какой урл ушел запрос, ну или оставить пост и посмотреть в инструментах разработчика, там должно быть видно на какой урл ушло
Andrey
ну и найти в роутах этот урл и понять отрабатывает он вообще или нет
mkdr
приветствую! подскажите пожалуйста, насколько безопасно выносить все структуры и некоторые переменные в отдельный файл. Есть ли какие-то потери по скорости и тому подобное. прикрепляю два скриншота, один из файла с структурами и переменными, а второй из мейна Спасибо!
mkdr
mkdr
Andrey
приветствую! подскажите пожалуйста, насколько безопасно выносить все структуры и некоторые переменные в отдельный файл. Есть ли какие-то потери по скорости и тому подобное. прикрепляю два скриншота, один из файла с структурами и переменными, а второй из мейна Спасибо!
Тебе стоит понимать, что глобальные переменные доступны всем, и это может быть небезопасно. А так, я бы тебе посоветовал линтеры прикрутить, есть ошибки и нерекомендованный стиль написать (например использование "_" в именах)
Andrey
как понимать доступны ВСЕМ?
Импортируешь пакет и обращаешься к этим переменным глобальным
mkdr
Импортируешь пакет и обращаешься к этим переменным глобальным
я видел статью на хабре, что нужно избегать глобальных переменных, но не прочитал ее, но сам факт и наличие такой статьи деражал в голове. получается стоит избегать глобальных переменных?
mkdr
Да. Глобалы - зло
а почему, если в крациях. просто не понимаю, неужели кто-то другой может получить к ним доступ
mkdr
Если ты в пакете имеешь глобальные переменные, но не используешь их, они все равно едят память. Вот тебе как пример
не использую какое-то время? допустим создал, а использовал только через час
mkdr
просто создавать переменные и совсем их не использовать я не собираюсь)
Andrey
не использую какое-то время? допустим создал, а использовал только через час
Вообще их наличие, это уже выделение под них памяти
Кіт ✙
а почему, если в крациях. просто не понимаю, неужели кто-то другой может получить к ним доступ
Во-первых, если запустить параллельно пару инстансов одного и того же кода, использующего глобалы, то получаем непредсказуемое поведение. Во-вторых, это делает код менее читаемым, ведь непонятно, откуда эта переменная. В-третьих, это затрудняет отладку, ведь глобальную переменную можно мутировать из любого места, и отследить это порой бывает затруднительно
Кіт ✙
КТО СКАЗАЛ АЛЛКАЦИЯ?!
Andrey
АААААА аллокация!!!
БББББ безразницы!!!
mkdr
получается, если я при запуске открываю файл, и из него достаю конфиг, то лучше будет его потом каждый раз передавать, а не загружать его в глобальную переменную
Кіт ✙
Я кстати тут насчёт первого пункта что-то не понял)
Условно - запустить в разных горутинах один и тот же код несколько раз, а они внутри как раз с глобалами совокупляются гады. Получаем непредсказуемое поведение
Кіт ✙
Начиная с либеральной паники, как это делает стандартная мапа при конкурентной записи, заканчивая неотслеживаемым импактом друг на друга
Кіт ✙
Ну так ты там написал инстансы, а это не одно и тоже)
А чем это не инстансы, спрашивается?
Кіт ✙
Ты, по всей видимости, взял частный случай, и подгоняешь под него весь термин. Нет, у него шире значение
Andrey
А чем это не инстансы, спрашивается?
Я твое сообщение прочитал, как запустить параллельно несколько экземпляров кода, то есть несколько программ)
Andrey
ну а если рутины не изменяют значение глобальной переменной, а только берут его, в чем проблема?
Может тебе проще всё-таки ту статью прочитать и там найти ответы на свои вопросы?
Кіт ✙
Может тебе проще всё-таки ту статью прочитать и там найти ответы на свои вопросы?
Думаю, там более популярно опишут, чем в чатах У меня вот, очевидно, получилось так себе
Юра (Юрий Александрович)
В двух словах: глобальные переменные использовать нежелательно, т.к. они потом становятся узким местом либо препятствием для расширения. Если переменная глобальная, то значит она может использоваться неограниченно из нескольких мест кода и из нескольких рутин. Это закономерно приводит к проблемам совместного доступа, когда разные объекты начинают неожиданно друг для друга в эту переменную что-то писать-читать-писать-читать
Юра (Юрий Александрович)
Почему это становится нерешаемой проблемой: 1) Вы никогда не сможете создать больше экземпляров глобальной переменной. Если какая-то структура у вас существует в единственном экземпляре, и весь код на это завязан, то в будущем все-таки с трудом можно будет перевести код на множественность экземпляров. А вот глобальная переменная будет в одном экземпляре совершенно безальтернативно. Она в одном экземпляре в пакете, а пакет в одном экземпляре в проекте.
Юра (Юрий Александрович)
2) Вы не сможете настроить или нормализовать доступ к этой переменной. Из-за того, что к этой переменной имеется доступ из неограниченного количества мест программы, вы никак надежно не обложите доступ к этой переменной примитивами синхронизации или другими механизмами разрешения конфликтов совместного доступа.
Юра (Юрий Александрович)
Рекомендуется разрабатывать архитектуру так, чтобы в будущем делать безболезненным переход с единства сущности на их множество. И уж тем более не допускать, чтобы этот переход был невозможным.
Юра (Юрий Александрович)
Например, если вы пишите свой браузер... ну вдруг. То нужно сразу закладывать в него возможность одновременной открытости нескольких веб-страниц. А то потом будет трудно. Если вы пишете свой архиватор - надо сразу учитывать, что нужно обрабатывать в несколько потоков и т.д.
Akim
Например, если вы пишите свой браузер... ну вдруг. То нужно сразу закладывать в него возможность одновременной открытости нескольких веб-страниц. А то потом будет трудно. Если вы пишете свой архиватор - надо сразу учитывать, что нужно обрабатывать в несколько потоков и т.д.
Если имеется в виду заранее закладывать многопоточную архитектуру... то нет, лучше заранее об этом не думать. Как правило трудно предсказать где и как она понадобится. В целом над архитектурой перед стартом проекта достаточно подумать в течении 5 минут и начать писать код. В процессе переосмысливать решения.
kostyaBro
а почему, если в крациях. просто не понимаю, неужели кто-то другой может получить к ним доступ
Рефакторинг кода, замена логики, мягко говоря неприятны. Глобальные константы ок
kostyaBro
Хотя там структуры с конфигом можно сказать пох ваще
mkdr
Хотя там структуры с конфигом можно сказать пох ваще
Я бы с радостью ее в константу записывал, но конфиг у каждого пользователя свой и берется из файла
kostyaBro
А откуда конфиги берутся?
mkdr
Из файла
kostyaBro
Но на самом деле лично я не парюсь про такое, с конфигами так проще, и проще в once обернуть
mkdr
Once?
mkdr
Чтоб избежать параллельного вызова?
mkdr
Чтоб избежать параллельного вызова?
Я прочитал) Чтоб не вызывалась больше одного раза
kostyaBro
нет смысла парсить более одного раза А сейчас вообще такая ситуация что после первого парсинга env их больше не существует
kostyaBro
Кто знает как сделать чтобы не ругался goland, не отключая inspection?
Belka
Может кто подскажет: у меня докер имедж собирается из образа alpine:3.11, мне нужно использовать команду apt-get install, такое решение сработает? RUN apk add bash RUN apt-get install ...
kostyaBro
Что ты хочешь инсталить?
Belka
нужно было шрифты китайские добавить
Belka
нашел решение с apk
kostyaBro
Держать 2 package manager такое себе
Ailab
Ailab
Установив себе пакетным менеджер нужно и пакеты собрать
Ailab
Ключики безопасности
kostyaBro
А почему ругается? Что пишет?
Говорит "че у тебя % в запросе забыл, ты дятел?“
kostyaBro
Ну наверное это непоправимо, я подозреваю
Andrey
Говорит "че у тебя % в запросе забыл, ты дятел?“
Ну тут либо писать по рекомендациям либо отключать линтеры и внедрять сиквел иньекции себе в код
kostyaBro
Просто количество полей динамическое
kostyaBro
Ну в целом да он думают что инъекция походу.
kostyaBro
Ну пусть думает наверное
kostyaBro
Params это '?'
Илья
Тут нет инъекции
может лучше билдер взять?