G72K
google golang escape analysis
И? Значение поля структуре гарантированно не попадет в GC, указатель _может_ не попасть в GC
Илья
И? Значение поля структуре гарантированно не попадет в GC, указатель _может_ не попасть в GC
эмм, и? утверждение было: указатели обычно же на хипе аллоцируются ?
G72K
Вы этот escape analysis видели? Он ш, чахлый, чуть что сразу в хип сует
G72K
Так что обычно да, в хипе
Roman
Насколько помню не всегда, может и на стеке
Roman
Если переменная никуда не передается из функции
G72K
Если переменная никуда не передается из функции
Вопрос то про тип поля в создаваемой структуре. Если структуру создаем, то уж почти всегда ее куда то передаем
G72K
Вобщем, value types сила, нечего джаву тут разводить и по указателю на значение держать :)
Pawel
Например вместо этого type User struct{ Id int Name string } Писать так type User struct{ Id *int Name *string }
вот конкретно так как у вас написано никогда не надо делать. Id должен быть всегда интом потому, что это значение, а не объект. Если не знаете разницу, рекомкндую загуглить.
Roman
вот конкретно так как у вас написано никогда не надо делать. Id должен быть всегда интом потому, что это значение, а не объект. Если не знаете разницу, рекомкндую загуглить.
Разницу между значением и указателем я понимаю. Вероятность схватить nil при сериализации подсказали, в чем проблема еще ?
Pawel
Разницу между значением и указателем я понимаю. Вероятность схватить nil при сериализации подсказали, в чем проблема еще ?
между значением и объектом. указатель как правило предназначен для объектов в ООПшном смысле проблемы две, и они оч досадные 1) доп. бойлерплейт на копирование 2) перед дереференсом при использовании надо тестить на nil. В данном конкретном случае, который вы привели, никаких бонусов нет, по этому оно не нужно
Pawel
но опять таки - это всё относится к значениям и не относится объектам Для объектов - указатели
Roman
Нормально ли использовать такую конструкцию для десереализации ? или есть варианты изящнее ? var curRequest struct{ Query string `json:"query"` } На каждый запрос предопределенными структурами не напасешься , а map[string]interface{} с рефлектом то еще удовольствие
Daniel
какую задачу решаете?
Мерль
Это громоздко, зато надёжно
Roman
какую задачу решаете?
Принимаю запрос с фронтенда, десереализую и бывают кастомные поля, в структуру модели эти кастомные поля тащить не хочеться. PS это не вы делали доклад на хайлоаде PostgreSQL vs MySQL ? )
Roman
Я делаю структуры на каждый запрос
Разница получается только в том, что я объявляю структуру не через type , и в локальном скоупе функции
Roman
Кастомные поля можно сделать опциональными с помощью указателей
Т.е. если значения нет, то nil не будет занимать памяти в отличии от default value?
Roman
что смущает?
После скриптовых языков такие кульбиты )
Мерль
Т.е. если значения нет, то nil не будет занимать памяти в отличии от default value?
Конечно будет Вообще вы пытаетесь оптимизировать потребление памяти до того, как эта проблема стала для вас актуальной. Не нужно этого делать
Мерль
Хочется узнать best practice , чтобы потом не переделывать в случае чего
Лучше всего — запилить модели на все случаи, и использовать указатели только для опциональных полей
orginux
Коллеги, подскажите, пожалуйста. Как в Golang сделать map с глобальной областью видимости (за пределами функции main)? Насколько я понял, ее (map)нельзя объявить без инициализации. А инициализировать вне функции нельзя.
orginux
Или как вернуть map из функции?
orginux
https://tour.golang.org/moretypes/19
Спасибо, догадывался что уже туго соображаю)
heavycharged
господа, два вопроса: есть ли какая-то вероятность, что тикер перестанет тикать, или начнет это делать слишком часто/слишком редко? и второй вопрос: если тикер тикает, а приложение где-то запаниковало и сделало recover, тикер сохраняет временной интервал, когда была паника? не начнет ли он заново отсчет?
Alex
господа, два вопроса: есть ли какая-то вероятность, что тикер перестанет тикать, или начнет это делать слишком часто/слишком редко? и второй вопрос: если тикер тикает, а приложение где-то запаниковало и сделало recover, тикер сохраняет временной интервал, когда была паника? не начнет ли он заново отсчет?
В теории ограничений нет. Можно тикать хоть каждую наносекнду. На практике зависить от железа. Если не будет успевать, то будет гонка. Если паника отловлена, и она случилась не в горутине тикера, то на тикер никак не повлияет.
heavycharged
Мне нужно делать одну и ту же задачу как по крону каждый час.
heavycharged
Но стабильно и регулярно.
heavycharged
Вот думаю, тикер присобачить, или цикл и time.Sleep.
Alex
Вот думаю, тикер присобачить, или цикл и time.Sleep.
По сути - одно и то же. Разница лишь в том, будете вы останавливать выполение текущей горутины или запускать отдельную.
heavycharged
Все в одной горутине планировал сделать, просто for { ... time.Sleep(time.Minute * 60)}
heavycharged
хотя конечно над каналом больше контроля
heavycharged
можно cancel прикрутить
heavycharged
Так а на счет defer pool.Put(v) кто-то подскажет, это нормальная же конструкция, если то что кладем в пул больше не нужно и нигде за рамками функции не будет использовано?
Игорь
Толи я дурак толи лыжи не едут. Как мне получить 0.3 в float?
Anonymous
Толи я дурак толи лыжи не едут. Как мне получить 0.3 в float?
1. С помощью округления )) 2. https://github.com/shopspring/decimal
Игорь
А из стандартных пакетов что-то типа decimal нет? Обязательно тянуть сторонние пакеты? Округление не подойдет. Нужно с финансами работать. Чуть выше этот вопрос уже обсуждали но до меня всеравно не очень дошло.
Игорь
Понял. Спасибо.
Anonymous
https://0.30000000000000004.com/
Стопудово заговор производителей процессоров чтобы заплату себе увеличивать с помощью неожиданных округлений 🤔
Игорь
Интересно это бы решило проблему?) https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80
Игорь
Если я верно понял проблему думаю решило бы
Andrey
Стопудово заговор производителей процессоров чтобы заплату себе увеличивать с помощью неожиданных округлений 🤔
к сожалению, я привык к людской некомпетентности, и не могу понять, всерьёз вы, или шутите. А тут ещё такая фигня нетривиальная, которую легко забыть :)
Andrey
спс :)
Andrey
Если я верно понял проблему думаю решило бы
переведите дробь 1/3 в десятичную
Denis
Хлопцы, есть такие для кого важна скорость роуминга? То есть нужен типа быстрый фреймворк. Если нет, то почему все письками меряются?
Denis
Ну ты понел
Denis
Я вообще не об этом. Я о том, что может эти супер быстрые фреймворки на самом деле не нужны?
Илья
Я вообще не об этом. Я о том, что может эти супер быстрые фреймворки на самом деле не нужны?
Чтобы ответить на этот вопрос, нужно уметь оценивать будущую нагрузку и уметь профилировать
Slach
С финансами работают в целых всегда, именно для того, чтобы контролировать округление.
хммм... а я всегда думал что с финансами работают в decimal и используют банковское округление, чтобы контроллировать ошибку
Denis
а кто-нибудь работал с revel? понимает как там работают тесты? в смысле то что они дают, это прям интеграционные или просто интерфейс для юнит?
Artem
а кто-нибудь работал с revel? понимает как там работают тесты? в смысле то что они дают, это прям интеграционные или просто интерфейс для юнит?
там же написанно в документации > Revel provides a testing framework that makes it easy to write and run functional tests against an application. функциональные тесты != юнит тесты и != интеграционные
Eugeny
что-то я хожу по кругу: есть xml хочу его отдать в виде json. читаю файл, подсовываю ему структуру, делаю xml.Unmarshal открытого файла в структу. потом делаю json.Murshal получаю []byte. И как теперь это отдать ы браузер правильно?
Eugeny
Типа того: w.Header().Set("Content-Type", "application/json")
Michael
Хранить всё в копейках, расчёты проводить в них, и показывать в рублях+копейки. Насколько я понял.
decimal обычно встроенного нет, так или иначе используются какие-то реализации под капотом