Библиотека для удобного преобразования golang AST(Abstract Syntax Tree, абстрактное синтаксическое дерево) в JSON и JSON в AST.
go install github.com/asty-org/asty
asty -h
▪Github
▪Asty
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍5❤2
Репозиторий, который создан для того, чтобы готовиться к собеседованию на Go на практике.
В данном репозитории находится рабочее CRUD-приложение, которое содержит множество ошибок, противоречащих современным стандартам, а также серьезные проблемы с безопасностью. Хороший вариант, чтобы попрактиковаться и исправить все ошибки.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥8❤5
🔥 Большой список сайтов с практическимим задачами для программистов.
Operation Go — практика написания кода на Go в форме браузерной игры.
Codeforces — платформа для алгоритмических соревнований. Проводит контесты и раунды с 5 задачами на 2 часа. Есть система рейтинга и два дивизиона. Задачи можно решать и проверять после соревнования. Также есть доступ к тренировкам с задачами с прошлых соревнований.
HackerRank - сайт будет больше интересен продвинутым программистам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.
Codewars — популярный cборник задач на разные темы, от алгоритмов до шаблонов проектирования.
LeetCode — известный сайт с задачами для подготовки к собеседованиям. Можно пообщаться и посмотреть решения других программистов.
Timus Online Judge — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности.
TopCoder - популярная американская платформа. Она проводит алгоритмические контесты, а также соревнования по промышленному программированию и марафоны, где задачи требуют исследования и нет единого верного алгоритма. Участникам даются недели на решение таких задач.
informatics.mccme.ru - платформа с теоретическим материалом и задачами, удобно разделенными по категориям. Большая база задач с олимпиад школьников также доступна.
SPOJ - большой англоязычный сайт с 20000+ задачами на разные темы: DP, графы, структуры данных и др. Иногда проводят неинтересные контесты, если не из страны их проведения.
CodeChef — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.
Project Euler - сборник 500 задач, проверяющих знание математических алгоритмов. Часто используется на собеседованиях, чтобы оценить алгоритмическую подготовку кандидата.
Kaggle - соревнования по анализу данных.
Golang tests - канал с тестами по Go
CodinGame - сайт для программистов и геймеров, предлагающий большую коллекцию видеоигр, оформленных в виде задач на программирование.
Al Zimmermann’s Programming Contests — платформа, на которой регулярно проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.
Programming Praxis — сайт, где можно найти много интересных задач.
CheckIO — сайт с задачами для программистов всех уровней, который вы проходите в виде игры.
Ruby Quiz — сайт с задачами для программистов на Ruby, но решения можно писать и на других языках.
Prolog Problems — Подборка задач для программистов, использующих Prolog.
Сборник задач от СppStudio - задачи на С++, но их можно и на других языках.
Empire of Code — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.
@Golang_google
Operation Go — практика написания кода на Go в форме браузерной игры.
Codeforces — платформа для алгоритмических соревнований. Проводит контесты и раунды с 5 задачами на 2 часа. Есть система рейтинга и два дивизиона. Задачи можно решать и проверять после соревнования. Также есть доступ к тренировкам с задачами с прошлых соревнований.
HackerRank - сайт будет больше интересен продвинутым программистам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.
Codewars — популярный cборник задач на разные темы, от алгоритмов до шаблонов проектирования.
LeetCode — известный сайт с задачами для подготовки к собеседованиям. Можно пообщаться и посмотреть решения других программистов.
Timus Online Judge — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности.
TopCoder - популярная американская платформа. Она проводит алгоритмические контесты, а также соревнования по промышленному программированию и марафоны, где задачи требуют исследования и нет единого верного алгоритма. Участникам даются недели на решение таких задач.
informatics.mccme.ru - платформа с теоретическим материалом и задачами, удобно разделенными по категориям. Большая база задач с олимпиад школьников также доступна.
SPOJ - большой англоязычный сайт с 20000+ задачами на разные темы: DP, графы, структуры данных и др. Иногда проводят неинтересные контесты, если не из страны их проведения.
CodeChef — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.
Project Euler - сборник 500 задач, проверяющих знание математических алгоритмов. Часто используется на собеседованиях, чтобы оценить алгоритмическую подготовку кандидата.
Kaggle - соревнования по анализу данных.
Golang tests - канал с тестами по Go
CodinGame - сайт для программистов и геймеров, предлагающий большую коллекцию видеоигр, оформленных в виде задач на программирование.
Al Zimmermann’s Programming Contests — платформа, на которой регулярно проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.
Programming Praxis — сайт, где можно найти много интересных задач.
CheckIO — сайт с задачами для программистов всех уровней, который вы проходите в виде игры.
Ruby Quiz — сайт с задачами для программистов на Ruby, но решения можно писать и на других языках.
Prolog Problems — Подборка задач для программистов, использующих Prolog.
Сборник задач от СppStudio - задачи на С++, но их можно и на других языках.
Empire of Code — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.
@Golang_google
🔥23👍9❤3
Внимание, Open Source 🚀
Ребята из PaaS-команды СберМаркета решили подарить миру крутой инструмент для интеграционного тестирования сервисов. Он будет полезен для тестировщиков и бэкендеров.
Кодовое название — grpc-wiremock. Это надстройка для мок-сервера Wiremock, позволяющая поддерживать gRPC, MultiAPI, TLS/SSL и роутинг по домену. А ещё отслеживать изменения в контрактах.
Подробнее об инструменте и том, как мы используем его внутри, читайте на Хабре!
Ребята из PaaS-команды СберМаркета решили подарить миру крутой инструмент для интеграционного тестирования сервисов. Он будет полезен для тестировщиков и бэкендеров.
Кодовое название — grpc-wiremock. Это надстройка для мок-сервера Wiremock, позволяющая поддерживать gRPC, MultiAPI, TLS/SSL и роутинг по домену. А ещё отслеживать изменения в контрактах.
Подробнее об инструменте и том, как мы используем его внутри, читайте на Хабре!
🔥9👍4❤1👎1
Шаблон фасад (англ. Facade) — структурный шаблон проектирования, позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
Как вы используете шаблон проектирования фасад в своей работе?
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥8👎6🤔4❤3😁2😱2
hydrapp - это небольшой Go-фреймворк, похожий на Electron с уникальной особенностью: Он может использовать (почти) любой браузерный движок для рендеринга фронтенда.
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥3
Вакансии направления Go – разрабатывай внутренние и B2B в Kaspersky!
Чем будете заниматься:
● Golang developer (Sandbox) – разрабатывать микросервисы на Go, участвовать в создании нового функционала проекта и подготовке релизов новых версий продукта;
● Go Developer (MSAP) – участвовать в разработке и поддержка бекенд сервисов под Linux/Kubernetes на Go;
● Golang developer – участвовать в разработке микросервисов, работать с имеющимися проектами;
● Golang developer (OSMP) – создавать бекенд сервисы под Linux/Kubernetes на Go, развивать микро-сервисный подход, писать тесты, проводить код-ревью.
Основные требования:
● опыт от 2х лет разработки на GO или другом языке (С++, С#, Java);
● опыт разработки микросервисов;
● опыт разработки под Linux;
● понимание принципов ООП.
Откликайтесь, даже если опыт частично отвечает требованиям. Возможно, у вас есть именно нужные нам навыки.
Чем будете заниматься:
● Golang developer (Sandbox) – разрабатывать микросервисы на Go, участвовать в создании нового функционала проекта и подготовке релизов новых версий продукта;
● Go Developer (MSAP) – участвовать в разработке и поддержка бекенд сервисов под Linux/Kubernetes на Go;
● Golang developer – участвовать в разработке микросервисов, работать с имеющимися проектами;
● Golang developer (OSMP) – создавать бекенд сервисы под Linux/Kubernetes на Go, развивать микро-сервисный подход, писать тесты, проводить код-ревью.
Основные требования:
● опыт от 2х лет разработки на GO или другом языке (С++, С#, Java);
● опыт разработки микросервисов;
● опыт разработки под Linux;
● понимание принципов ООП.
Откликайтесь, даже если опыт частично отвечает требованиям. Возможно, у вас есть именно нужные нам навыки.
👍13👎9🔥2❤1😁1
Наблюдатель (англ. Observer) — поведенческий шаблон проектирования. Также известен как «подчинённые» (англ. Dependents). Реализует у класса механизм, который позволяет объекту этого класса получать оповещения об изменении состояния других объектов и тем самым наблюдать за ними.
Паттерн Наблюдатель определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются об этом и обновляются автоматически.
Пример 1: Простое уведомление о событии
Пример 2: Тикер фондового рынка
Пример 3: Погодная станция
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤8👎4🔥3
▪Создание собственного локального прокси с помощью Tor.
Пример в изображении 1.
▪Использование коммерческого сервиса прокси-пулов SmartProxy.
Пример в изображении 2.
▪Создание собственного HTTP-клиента с прокси-функцией.
Пример в изображении 3.
▪ После настройки Tor-клиента мы можем проверить IP-адрес запроса. Затем мы вызываем NewIP, чтобы изменить IP-адрес нашего клиента.
Изображение 4.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤5🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🧑💻 PLOW
Plow инструмент, который предназначен для нагрузочного тестирования HTTP-серверов.
Он основан на Go-библиотеке fasthttp, которая до десяти раз быстрее стандартной реализации, что делает его каким‑то аномально быстрым.
Plow может отдавать статистику в реальном времени не только в окне терминала, но и в браузере (по стандарту встроенный сервер доступен на 18888-м порте).
Запуск возможен из Docker или установкой из исходников:
Альтернатива:
Аргументы в целом ничего необычного собой не представляют: тут у нас стандартная для таких программ настройка количества потоков (-c), желаемого количества запросов (-n), времени теста (-d 30s или -d 5m, например) и HTTP-метода (--method="GET"). Про другие параметры можно подробно прочитать в справке программы (--help). Цель передается без специальных параметров.
▪ Github
@Golang_google
Plow инструмент, который предназначен для нагрузочного тестирования HTTP-серверов.
Он основан на Go-библиотеке fasthttp, которая до десяти раз быстрее стандартной реализации, что делает его каким‑то аномально быстрым.
Plow может отдавать статистику в реальном времени не только в окне терминала, но и в браузере (по стандарту встроенный сервер доступен на 18888-м порте).
Запуск возможен из Docker или установкой из исходников:
go install github.com/six-ddc/plow@latest
plow <args>
Альтернатива:
docker run --rm --net=host ghcr.io/six-ddc/plow <args>
Аргументы в целом ничего необычного собой не представляют: тут у нас стандартная для таких программ настройка количества потоков (-c), желаемого количества запросов (-n), времени теста (-d 30s или -d 5m, например) и HTTP-метода (--method="GET"). Про другие параметры можно подробно прочитать в справке программы (--help). Цель передается без специальных параметров.
▪ Github
@Golang_google
👍23🔥7❤3🤩1
Golang бросает панику при закрытии уже закрытого канала. Есть несколько способов, чтобы избежать такого рода паники.
Каждый вариант кода инкапсулирует struct и используется как интерфейс (картинка 1).
1) Panic
В примемер реализован интерфейс
(картинка 2)
Второй вызов
2) Простой
(картинка 3)
3) Панику можно перехватить с помощью функции
(картинка 4).
4)
5)В Golang 1.21 появилась функция
Можно также использовать
6)
Напишите свой вариант кода в комментариях👇
@Golang_google
Каждый вариант кода инкапсулирует struct и используется как интерфейс (картинка 1).
1) Panic
В примемер реализован интерфейс
Signal
:(картинка 2)
Второй вызов
Close()
вызывает панику.2) Простой
select
является потокобезопасным вариантом.(картинка 3)
3) Панику можно перехватить с помощью функции
recover()
в defer(картинка 4).
4)
sync.Once
- еще один способ перехвата. Он вызывает close()
только один раз и это элегантный способ обработки закрытия нескольких каналов (картинка 5).5)В Golang 1.21 появилась функция
sync.OnceFunc
, которая лучше подходит для этого случая использования (картинка 6).Можно также использовать
sync.Mutex
, но он не является оптимальным, как sync.Once, поскольку всегда использует блокировку и разблокировку.6)
context.WithCancel
- это еще один вариант, чтобы избежать панику (картинка 7).Напишите свой вариант кода в комментариях👇
@Golang_google
🔥19👍7❤2🥰2😁2🤔2👎1