Предотвращаем утечки памяти в Go, ч. 1. Ошибки бизнес-логики
Можно любить Go за многое: за простоту и строгость, за горутины и каналы, за реализацию параллельного и асинхронного программирования, за продвинутый планировщик, за аллокатор с большим количеством оптимизаций, за высокую производительность.
Но, по сообщениям некоторых пользователей, у программ, написанных на Go, течёт память. Issue-трекер языка Go на github по запросам «high memory usage», «memory leak», «out of memory» выдаёт сотни и тысячи тикетов. А в самом популярном вопросе на stackoverflow по словосочетанию «golang memory» автор пытается разобраться, почему потребление оперативной памяти в рантайме в 4 раза превышает количество реально сделанных аллокаций. Обращения, в которых люди рапортуют о перерасходе оперативной памяти в Go, стали массовым явлением.
Что же это — утечки памяти, вызванные программистскими ошибками, или ожидаемое поведение рантайма языка? Мы попытаемся разобраться в причинах этого явления и сформулировать общие рекомендации, которые помогут в отладке проблем с потреблением памяти.
Читать дальше
@Golang_google
Можно любить Go за многое: за простоту и строгость, за горутины и каналы, за реализацию параллельного и асинхронного программирования, за продвинутый планировщик, за аллокатор с большим количеством оптимизаций, за высокую производительность.
Но, по сообщениям некоторых пользователей, у программ, написанных на Go, течёт память. Issue-трекер языка Go на github по запросам «high memory usage», «memory leak», «out of memory» выдаёт сотни и тысячи тикетов. А в самом популярном вопросе на stackoverflow по словосочетанию «golang memory» автор пытается разобраться, почему потребление оперативной памяти в рантайме в 4 раза превышает количество реально сделанных аллокаций. Обращения, в которых люди рапортуют о перерасходе оперативной памяти в Go, стали массовым явлением.
Что же это — утечки памяти, вызванные программистскими ошибками, или ожидаемое поведение рантайма языка? Мы попытаемся разобраться в причинах этого явления и сформулировать общие рекомендации, которые помогут в отладке проблем с потреблением памяти.
Читать дальше
@Golang_google
😎 Как мы себя обманываем, только бы продолжать пользоваться Golang
За два года с тех пор, как я опубликовал статью I want off Mr Golang's Wild Ride, она вновь и вновь всплывала на Reddit, Lobste.rs, на HackerNews и в других местах.
Всякий раз дискуссия выходит к одним и тем же ответам:
Вы говорите о Windows: а ведь как раз с Windows язык Go не слишком хорош! (Опять же, кого это волнует?)
Вы однобоки: о сильных сторонах Go вы не говорите!
Вы не понимаете тех компромиссов, на которые мы идем в Go.
Крупные компании используют Go, значит, не так уж он и плох!
«Правильно» моделировать задачи очень затратно, поэтому забота о корректности – спорный довод.
Корректность всегда бывает в каком-то диапазоне, Go позволяет частично пожертвовать ею ради ускорения разработки.
Вы сразу ссылаетесь на Rust, но и у него есть свои недостатки, так что ваш аргумент никуда не годится.
Т.д.
Среди комментаторов есть и громогласная фракция тех, кто всем сердцем соглашаются с моей филиппикой, но давайте сосредоточимся на разборе того явного конфликта, который здесь просматривается.
Читать дальше
@Golang_google
За два года с тех пор, как я опубликовал статью I want off Mr Golang's Wild Ride, она вновь и вновь всплывала на Reddit, Lobste.rs, на HackerNews и в других местах.
Всякий раз дискуссия выходит к одним и тем же ответам:
Вы говорите о Windows: а ведь как раз с Windows язык Go не слишком хорош! (Опять же, кого это волнует?)
Вы однобоки: о сильных сторонах Go вы не говорите!
Вы не понимаете тех компромиссов, на которые мы идем в Go.
Крупные компании используют Go, значит, не так уж он и плох!
«Правильно» моделировать задачи очень затратно, поэтому забота о корректности – спорный довод.
Корректность всегда бывает в каком-то диапазоне, Go позволяет частично пожертвовать ею ради ускорения разработки.
Вы сразу ссылаетесь на Rust, но и у него есть свои недостатки, так что ваш аргумент никуда не годится.
Т.д.
Среди комментаторов есть и громогласная фракция тех, кто всем сердцем соглашаются с моей филиппикой, но давайте сосредоточимся на разборе того явного конфликта, который здесь просматривается.
Читать дальше
@Golang_google
Использование sync/atomic в golang для float64
Привет всем гоферам! В данной статье я хочу разобрать как можно воспользоваться модулем sync/atomic для типа float64.
Постановка задачи
У нас есть канал из которого мы можем читать результаты выполнения задач. Результат задачи содержит флаг показывающий была ли ошибка при выполнении задачи и результат выполнения этой задачи (тип float64). Нужно найти сумму всех результатов и количество ошибок.
Читать дальше
@Golang_google
Привет всем гоферам! В данной статье я хочу разобрать как можно воспользоваться модулем sync/atomic для типа float64.
Постановка задачи
У нас есть канал из которого мы можем читать результаты выполнения задач. Результат задачи содержит флаг показывающий была ли ошибка при выполнении задачи и результат выполнения этой задачи (тип float64). Нужно найти сумму всех результатов и количество ошибок.
Читать дальше
@Golang_google
Implementing a simple jq clone in Go, and basics of Go memory profiling
https://notes.eatonphil.com/implementing-a-jq-clone-in-go.html
https://notes.eatonphil.com/implementing-a-jq-clone-in-go.html
🌠 Предотвращаем утечки памяти в Go, ч. 2. Особенности рантайма
Мы продолжаем наш рассказ о причинах повышенного потребления памяти в языке Go. В предыдущей статье мы детально разобрали ошибки бизнес-логики приложения, которые могут привести к утечкам памяти. Сегодня же сосредоточимся на особенностях рантайма языка Go.
Привет, Хабр! Меня зовут Виталий Исаев, я занимаюсь бэкенд-разработкой в компании МойОфис. При отладке утечек памяти в Go у программиста в какой-то момент может возникнуть ощущение тупика. Все тривиальные ошибки бизнес-логики проверены, но утечки продолжаются, и что дальше делать — непонятно. Это означает, что пора переходить к исследованию особенностей рантайма и того, как они проявляются в конкретно взятой программе, работающей под определённой нагрузкой.
Рантайм Go — сложная, постоянно развивающаяся конструкция, в которой непросто разобраться, но мы постараемся выработать общие рекомендации по решению проблем, связанных с повышенным потреблением памяти.
Читать дальше
1 часть
@Golang_google
Мы продолжаем наш рассказ о причинах повышенного потребления памяти в языке Go. В предыдущей статье мы детально разобрали ошибки бизнес-логики приложения, которые могут привести к утечкам памяти. Сегодня же сосредоточимся на особенностях рантайма языка Go.
Привет, Хабр! Меня зовут Виталий Исаев, я занимаюсь бэкенд-разработкой в компании МойОфис. При отладке утечек памяти в Go у программиста в какой-то момент может возникнуть ощущение тупика. Все тривиальные ошибки бизнес-логики проверены, но утечки продолжаются, и что дальше делать — непонятно. Это означает, что пора переходить к исследованию особенностей рантайма и того, как они проявляются в конкретно взятой программе, работающей под определённой нагрузкой.
Рантайм Go — сложная, постоянно развивающаяся конструкция, в которой непросто разобраться, но мы постараемся выработать общие рекомендации по решению проблем, связанных с повышенным потреблением памяти.
Читать дальше
1 часть
@Golang_google
Kubernetes IaC на Go: глубокое погружение в библиотеку cdk8s 👇
🔗 Начало работы с cdk8s
🔗 cdk8s-plus в действии
🔗 Использование Kubernetes Custom Resource Definitions с cdk8s
🔗 Начало работы с cdk8s
🔗 cdk8s-plus в действии
🔗 Использование Kubernetes Custom Resource Definitions с cdk8s
Learning go in 2022 — Boost your journey
В этой статье описаны некоторых «продвинуьые» функциях Go, которые могут улучшить ваш навык программирования и помогут вам создать приложения на Go, используя конкуренцию:
Читать
1 часть
@Golang_google
В этой статье описаны некоторых «продвинуьые» функциях Go, которые могут улучшить ваш навык программирования и помогут вам создать приложения на Go, используя конкуренцию:
Читать
1 часть
@Golang_google
🌅 Lua конфигурация Neovim для разработки на Go
В процессе знакомства с Neovim было прочитано много статей, конфигураций на Github, было просмотрено огромное количество роликов на Youtube на тему настройки, но в большинстве случаев приходилось донастраивать все под себя. В этой статье я расскажу как я настроил Neovim для разработки на Go, используя только Lua плагины и init.lua.
Эта статья может быть полезна тебе, если:
пишешь на Go
есть конфиг на Vimscript, но хочется на Lua
хочется пересесть с тяжелых современных IDE или текстовых редакторов, таких как Goland, Vscode и других, на Neovim
Смотреть
@Golang_google
В процессе знакомства с Neovim было прочитано много статей, конфигураций на Github, было просмотрено огромное количество роликов на Youtube на тему настройки, но в большинстве случаев приходилось донастраивать все под себя. В этой статье я расскажу как я настроил Neovim для разработки на Go, используя только Lua плагины и init.lua.
Эта статья может быть полезна тебе, если:
пишешь на Go
есть конфиг на Vimscript, но хочется на Lua
хочется пересесть с тяжелых современных IDE или текстовых редакторов, таких как Goland, Vscode и других, на Neovim
Смотреть
@Golang_google
🗼 watchtower – инструмент, который позволяет автоматизировать обновление docker-контейнеров после внесения в них изменений
Следит за обновлениями и корректно обновляет контейнеры
$ docker run --detach \
--name watchtower \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
@Golang_google | #Go #Docker #Interesting #Useful
@Golang_google
Следит за обновлениями и корректно обновляет контейнеры
$ docker run --detach \
--name watchtower \
--volume /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
@Golang_google | #Go #Docker #Interesting #Useful
@Golang_google
Trivy – Сканер на наличие уязвимостей в образах контейнеров, файловых системах и репозиториях Git, а также для проблем с конфигурацией
Trivy обнаруживает уязвимости пакетов ОС (Alpine, RHEL, CentOS и т. д.) и языковых пакетов (Bundler, Composer, npm, yarn и т. д.). Кроме того, Trivy сканирует файлы Infrastructure as Code (IaC), такие как Terraform, Dockerfile и Kubernetes, чтобы обнаружить потенциальные проблемы конфигурации
#GitHub | #Go #Useful #Scanner
@Golang_google
Trivy обнаруживает уязвимости пакетов ОС (Alpine, RHEL, CentOS и т. д.) и языковых пакетов (Bundler, Composer, npm, yarn и т. д.). Кроме того, Trivy сканирует файлы Infrastructure as Code (IaC), такие как Terraform, Dockerfile и Kubernetes, чтобы обнаружить потенциальные проблемы конфигурации
#GitHub | #Go #Useful #Scanner
@Golang_google
Полезная статья на Хабр о Конкурентности Go
В ней Golang-разработчик в МТС Digital Артем Чаадаев собрал и подробно разобрал наиболее подходящие примеры использования конкурентного кода в Go на основе личного опыта.
Хотите узнать, как писать конкурентный код, и как с его помощью решать бизнес-кейсы? Значит, вам сюда.
В ней Golang-разработчик в МТС Digital Артем Чаадаев собрал и подробно разобрал наиболее подходящие примеры использования конкурентного кода в Go на основе личного опыта.
Хотите узнать, как писать конкурентный код, и как с его помощью решать бизнес-кейсы? Значит, вам сюда.
Хабр
Конкурентность в Go: пять примеров
Привет, Хабр! Я Артем Чаадаев, Golang-разработчик в МТС Digital. Традиционно считается, что главная фича Go – это «многопоточность из коробки». Этому посвящено немало статей, авторы которых...
Golang-дайджест № 19 (1 – 31 июля 2022)
Свежая подборка новостей и материалов
Интересное в этом выпуске
Выпущены версии 1.18.4 и 1.17.12;
Выпущен GoLand 2022.2;
Go To Memory;
Что нового в Go 1.19?
Приятного чтения!
@Golang_google
Свежая подборка новостей и материалов
Интересное в этом выпуске
Выпущены версии 1.18.4 и 1.17.12;
Выпущен GoLand 2022.2;
Go To Memory;
Что нового в Go 1.19?
Приятного чтения!
@Golang_google
Расскажите про структуры данных: stack, queue, linked list, trie, balanced tree, Hash Table
Ответ:
8 известных структур данных, о которых спросят на собеседовании
#теория #middle
@golang_interview
Ответ:
8 известных структур данных, о которых спросят на собеседовании
#теория #middle
@golang_interview
Тестирование в Go: от плохого к хорошему.
В этом видео мы расскажем теорию тестирования, поговорим о том, как нужно писать тесты в Golang и затронем тему архитектуры проекта.
Первая часть
Вторая часть
Код
Test Pyramid
@Golang_google
В этом видео мы расскажем теорию тестирования, поговорим о том, как нужно писать тесты в Golang и затронем тему архитектуры проекта.
Первая часть
Вторая часть
Код
Test Pyramid
@Golang_google