Как стать автором
Обновить
9
0
Andrei Berenda @AndreiBerenda

Software Development Engineer at Optifino

Отправить сообщение

Я всегда мечтал поработать в FAANG и тут подвернулась возможность, почему бы и нет

Я думаю это не про it (по ощущениям)

В России тоже кажется зп больше 200к будет в большинстве городов больше 5%, но это не говорит о том что обычный middle+ не может получать 200к

https://www.youtube.com/watch?v=AT_T4z0bnjg
вот тут рассказал примерно это же, но немного дополнил

Я хотел показать, что если что в функции SendEmail есть паника, не обязательно ее явно вызывать, может быть обращение к nil интерфейсу или что-нибудь такое, то это приводит к падению сервера. Я вызвал явно панику для того, что бы было проще понять почему здесь паника, а не потому что это считается хорошей практикой, может быть нужно это было пояснить в статье.
Но я с тобой согласен, вызывать явно паники считается bad practice в Golang, правильнее возвращать явные ошибки из функции.

Спасибо, не знал

Да, все правильно

Кто работает с C/C++, знает, что компилятор можно попросить заинлайнить функцию. А как в Go? 

Можно только попросить, но inline не обязывает компилятор C/C++ встраивать функцию
поэтому выглядит что не сильно отличается С/С++ от Golang в этом плане
https://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method

Но кажется довольно удобно
Можно решить данную задачу в C++ несколькими строчками (так как next_permutation изменяет строку, нужно еще ее вернуть, поэтому несколько)

Если собирать в каждом воркере свою сумму и при завершении воркера суммировать все результаты, то мы не знаем суммарное количество до завершения, а часто хочется иметь прогресс(сейчас 50 ошибок и тотал 50123,12), если не нужно знать суммарное количество до завершения, то суммировать в воркере и потом получить тотал с использованием каналов, mutex или атомиков можно (в данном случае ты прав, наверное самое оптимальное решение будет с использованием канала).
Наверное можно собирать периодически тотал со всех воркеров(допустим раз в 10 секунд), но это уже немного другая задача

Спасибо большое, обязательно гляну

Используя каналы можно решить данную задачу и будет наверное проще это сделать.
Я сильно не погружался еще в каналы(я на golang не так давно пишу), но если посмотреть runtime/chan.go, то можно увидеть, что в каналах используется mutex(там не sync.Mutex, но все равно используется mutex). Поэтому, если выбирать каналы, то получается выбирать mutex. Но mutex под капотом использует атомики, поэтому если задачу можно решить с использованием atomic, то скорей всего это будет более оптимальное решение по времени, чем с использованием mutex(но все нужно мерить в каждой конкретной задаче, может быть прирост будет минимальный или его вообще не будет).
В этой статье я хотел показать как пользоваться атомиками для float64 и ничего больше, я не хотел показать этой статьей, что решение моей задачи оптимально именно с использованием атомиков(в каждом конкретном случае нужно мерить и находить компромис между поддерживаемым и читаемым кодом и скоростью его выполнения).
Решение с атомиками, получилось не сильно сложное, как мне показалось, поэтому его можно рассмотреть при выборе решения задачи.

Информация

В рейтинге
Не участвует
Откуда
Караганда, Карагандинская обл., Казахстан
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Web Developer
Senior
Golang
Python
C++
PostgreSQL
Java