37.2K subscribers
1.47K photos
34 videos
5 files
1.62K links
加入频道
Обработка ошибок приложений CLI в Golang 

https://dev-gang.ru/article/obrabotka-oshibok-prilozhenii-cli-v-golang-tizggrwzv1/

@Golang_google
Golang - оператор fallthrough

Оператор fallthrough используется в предложении case switch. Он должен использоваться в конце предложения case.

Он используется для выполнения следующего предложения case без проверки выражения.


Читать дальше
Спецификация Go

@Golang_google
@golang_interview - собираем здесь все возможные вопросы и ответы с собеседований по Go. Для всех уровней разработчиков. Присылайте свои задачи и вопросы, с которыми вы сталкивались на собеседованиях.

другие полезные ресурсы:
@golangtests - тесты и задачи GO
@golangl - чат
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
sync.Mutex

Golang известен своим параллелизмом (горутинами). Существует не только параллелизм, но и настоящий параллелизм, который можно реализовать с помощью Golang.

Таким образом, в этом случае мы должны убедиться, что несколько горутин не должны пытаться изменить ресурс одновременно, что приводит к конфликту.

Чтобы убедиться, что к ресурсу одновременно обращается только одна горутина, мы можем использовать нечто, называемое sync.Mutex.

Эта концепция называется взаимным исключением, а структура данных, обеспечивающая его, общепринятым названием — mutex.
Вариант использования без мьютекса
Давайте рассмотрим простой пример использования Mutex в горутинах.

Скажем, например, если нам нужно увеличить значение одной переменной одной горутиной и уменьшить значение той же переменной другой горутиной.

Этот пример предназначен только для понимания концепции.

Читать дальше

@Golang_google
Merge sort
Реализуйте конкурентное решение merge sort (сортировка слиянием), используя горутины и каналы.


В качестве опорной точки можно взять эту последовательную реализацию:

В начале при сортировке слиянием мы рекурсивно разделяем массив на right и left стороны и на строках 30-34 вызываем MergeSort для обеих сторон.

Теперь нужно сделать так, чтобы Merge(left, right) выполнялась после получения возвращаемых значений от обоих рекурсивных вызовов, то есть и left и right должны обновляться до того, как Merge(left, right) сможет быть выполнена. Для этого на строке 26 мы вводим канал типа bool и отправляем в него true сразу после выполнения left = MergeSort(data[:mid] (строка 32).

Операция <-done блокирует код на строке 35 до инструкции Merge(left,right), чтобы она не продолжилась, пока горутина не завершится. После завершения горутины и получения true в канале done код переходит к инструкции Merge(left, right) на строке 36.

@golang_interview
dynaQ

Расширение для пакета Go sql в стандартной библиотеке для поддержки динамических запросов из базы данных.

Установка: go get github.com/syke99/dynaQ

Github
Описание

@Golang_google
Реализация простого клона jq на Go + разбор основ профилирования памяти в Go.

Читать
Предотвращаем утечки памяти в Go, ч. 1. Ошибки бизнес-логики

Можно любить 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
✈️ SyMon — это простой инструмент для мониторинга Linux, написанный на Go.

Github

@Golang_google
Использование sync/atomic в golang для float64

Привет всем гоферам! В данной статье я хочу разобрать как можно воспользоваться модулем 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
🌠 Предотвращаем утечки памяти в Go, ч. 2. Особенности рантайма

Мы продолжаем наш рассказ о причинах повышенного потребления памяти в языке Go. В предыдущей статье мы детально разобрали ошибки бизнес-логики приложения, которые могут привести к утечкам памяти. Сегодня же сосредоточимся на особенностях рантайма языка Go.

Привет, Хабр! Меня зовут Виталий Исаев, я занимаюсь бэкенд-разработкой в компании МойОфис. При отладке утечек памяти в Go у программиста в какой-то момент может возникнуть ощущение тупика. Все тривиальные ошибки бизнес-логики проверены, но утечки продолжаются, и что дальше делать — непонятно. Это означает, что пора переходить к исследованию особенностей рантайма и того, как они проявляются в конкретно взятой программе, работающей под определённой нагрузкой.

Рантайм Go — сложная, постоянно развивающаяся конструкция, в которой непросто разобраться, но мы постараемся выработать общие рекомендации по решению проблем, связанных с повышенным потреблением памяти.



Читать дальше
1 часть

@Golang_google
Kubernetes IaC на Go: глубокое погружение в библиотеку cdk8s 👇

🔗 Начало работы с cdk8s
🔗 cdk8s-plus в действии
🔗 Использование Kubernetes Custom Resource Definitions с cdk8s
⚡️ Barmak

Это простой проект для тестирования 4 популярных библиотек Kafka для Go. Библиотеки для теста:

Confluent
Sarama
Goka
Kafka-Go

Github

@Golang_google
✔️ Неплохой бесплатнный вводный курс по Go

Смотреть

@Golang_google
Learning go in 2022 — Boost your journey

В этой статье описаны некоторых «продвинуьые» функциях 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
🔥 IM_System_Go

Система обмена мгновенными сообщениями на языке go.

Github

@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