Хмм, в Go легковесные потоки даже называются по-другому — горутины, в отличие от корутин в других языках.
Давайте сравним их и обсудим отличия.
Во-первых, сравнивать горутины и корутины - это как сравнивать горячее с высоким. Они предназначены для разных задач и спроектированы по-разному.
co_yield
и co_return
создают значения, co_await
получает значение. В каком-то смысле это старый недобрый setjmp
/longjmp
с поддержкой хранилища локальных переменных от компилятора.yield
, ни await
. Нужно явным образом организовывать передачу данных из горутины через каналы.Я не буду разводить флейм на тему, что лучше - асинхронные алгоритмы с
yield
/wait
или легковесные потоки с каналами. Лично я препочитаю потоки/горутины, потому что мне проще думать в стиле обмена данными между акторами, а не нарезки функциональности на асинхронную лапшу.Вот такие дела ¯\_(ツ)_/¯
#junior
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Пакет Go, который предоставляет функционал для проверки сертификатов
SSL/TLS
на наличие вредоносных подключений.▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Годное видео, в котором описывается, что же делать с Dependency Injection в Go.
Очень актуально для проектов с большим количеством зависимостей.
Wire — библиотека для разрешения зависимостей в Go.
Работает на основе кодогенерации, а не рефлексии, что плюс к производительности.
Автор объясняет, как инициализировать базу данных через Wire, и как это может помочь избежать ошибок.
Он также обсуждает, как можно возвращать ошибки и деконструкторы.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Цель этой библиотеки - предоставить простой, и беспроблемный способ запуска конвейеров машинного обучения Hugging face в ваших приложениях Go.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Одна из интересных особенностей Go – это использование комментариев для управления компиляцией. Например, вот такая директива:
// +build !amd64
— это "обычный" комментарий в исходном коде, но его читает препроцессор и использует указание
+build
для того, чтобы определить платформу (всё, что не amd64
)Это, конечно, не какой-то там особенный и исключительный случай использования комментариев: вспомните что-нибудь типа
#!/usr/bin/perl
. Тем не менее, ситуация, когда содержание комментария непосредственно влияет на процесс сборки, всё же выглядит необычно.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбираются такие штуки, как:
— Работа с
env
— Нюансы работы с командной строкой
— Работа с указателями
— Структуры
— Использование
defer
— ...и много всего ещё
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Давайте разберём такой супер-прикладной вопрос.
python-telegram-bot
называется ConversationHandler
'ы. Они уже реализованы как дополнение к пакету: https://github.com/and3rson/telemux?tab=readme-ov-fileВыглядеть будет примерно так:
mux := tm.NewMux().
AddHandler(tm.NewCommandHandler(
"start",
func(u *tm.Update) {
bot.Send(tgbotapi.NewMessage(u.Message.Chat.ID, "Hello! Say something. :)"))
},
)).
AddHandler(tm.NewHandler(
tm.Any(),
func(u *tm.Update) {
bot.Send(tgbotapi.NewMessage(u.Message.Chat.ID, "You said: "+u.Message.Text))
},
))
— Соотносишь команду с хендлером
— Хендлеры заносишь в мапу по ключу команды
— При получении команды от пользователя проверяешь ее наличие в мапе и вызываешь метод хендлера, в который можешь передать ответ и обработать как тебе нужно
Как-то так ¯\_(ツ)_/¯
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Проект, который предоставляет быстрый и простой способ создания каркаса http-сервера Go.
Технический стек, включенный в это проект, включает Go, HTML, Temple и Tailwind.
git clone https://github.com/phillip-england/templ-quickstart <target-directory>
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Разработчикам, использующим пакет, придется вводить его имя каждый раз, когда они вызывают функцию из этого пакета. (Вспомните
fmt.Printf
, fmt.Println
, fmt.Print
и т. д.) Чтобы не возникало проблем, при выборе имен пакетов следует соблюдать несколько правил:
fmt
).strconv
).(Например, если бы пакет
fmt
назывался format
, то импорт этого пакета создавал бы риск конфликта с локальной переменной format
)@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека Go для создания WhatsApp ботов для нескольких устройств.
▪Github
▪Docs
#golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека для управление логами, которая работает немного эффективнее, чем Splunk .
Разработчикам приходится перебирать различные инструменты для ведения журналов, метрик, трассировок
Splunk, DataDog, New Relic стоят дорого 💸 💸 💸
ElasticSearch требует много машин, обслуживание кластера несет сложности 👩 💻 👩 💻
Grafana Loki имеет низкую производительность запросов 🐌 🐌
Всего оддин двоичный файл, который вы можете запустить на своем ноутбуке и обрабатывать 8 ТБАЙТ в день.
▪Поддерживает: Open Telemetry, Elastic, Splunk HEC, Loki
▪Поддерживает несколько языков запросов: Splunk SPL, SQL и Loki LogQL
▪Простая архитектура,
▪Легко начать работу.
🔗 GIthub
🔗 Docs
Please open Telegram to view this post
VIEW IN TELEGRAM
Было опрошено 500 Go-разработчиков
Опрос затрагивает многие интересные вопросы:
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM