37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Hugot: Huggingface 🤗 pipelines for golang

Цель этой библиотеки - предоставить простой, и беспроблемный способ запуска конвейеров машинного обучения 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
👣 Решения типичных задач Go

Полезная статья с решением типичных задач Go-разработчика, будет полезно освежить

Разбираются такие штуки, как:
— Работа с env
— Нюансы работы с командной строкой
— Работа с указателями
— Структуры
— Использование defer
— ...и много всего ещё

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как написать многоуровневое меню на Go для telegram-бота?

Давайте разберём такой супер-прикладной вопрос.

Самый простой способ использовать пакет: https://github.com/go-telegram-bot-api/telegram-bot-api И дополнение к нему, которой в 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
👣 Templ-quickstart

Проект, который предоставляет быстрый и простой способ создания каркаса 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
👣 Предлагаю вспомнить о правилах именования пакетов Go

Разработчикам, использующим пакет, придется вводить его имя каждый раз, когда они вызывают функцию из этого пакета. (Вспомните fmt.Printf, fmt.Println, fmt.Print и т. д.)

Чтобы не возникало проблем, при выборе имен пакетов следует соблюдать несколько правил:
Имя пакета должно быть записано только символами нижнего регистра.

Имя следует сокращать, если его смысл очевиден (например, fmt).

По возможности имя должно состоять из одного слова. Если необходимы два слова, они не должны разделяться символами подчеркивания, а второе слово не должно начинаться с буквы верхнего регистра (пример — пакет strconv).

Импортированные имена пакетов могут конфликтовать с именами локальных переменных, поэтому не используйте имя, которое с большой вероятностью может быть выбрано пользователями пакета

(Например, если бы пакет fmt назывался format, то импорт этого пакета создавал бы риск конфликта с локальной переменной format)

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Whatsmeow

Библиотека Go для создания WhatsApp ботов для нескольких устройств.

Github
Docs

#golang

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Siglens

Библиотека для управление логами, которая работает немного эффективнее, чем 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
👣 Интересный опрос Go-разработчиков

Было опрошено 500 Go-разработчиков

Опрос затрагивает многие интересные вопросы:
для каких задач используют Go
насколько часто применяют дженерики
какие инструменты в арсенале и т.д.

📎 Слайды опроса

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevOps Docker
🖥 Как устроены конвейеры CI/CD 💻

Схема взаимодействия контейнерных технологий в рамках работы с привычными инструментами может быть представлена так:

1️⃣Утилита podman с помощью Libpod API обращается к библиотеке libpod, которая вызывает низкоуровневый container runtime (по умолчанию утилиту runc)
containers/podman
Podman Commands

2️⃣Утилита docker с помощью Docker API вызывает сервис dockerd
docker/cli
Docker CLI reference
Docker architecture
Docker API

3️⃣Сервис dockerd вызывает сервис containerd
Dockerd reference

4️⃣Сервис containerd вызывает низкоуровневый container runtime (по умолчанию утилиту runc)
containerd/containerd
Containerd Scope and principles

5️⃣Сервис kubelet с помощью протокола CRI вызывает сервис container runtime (например, containerd или crio)
Container Runtime Interface
Container Runtimes
CRI: the Container Runtime Interface

6️⃣Сервис containerd вызывает низкоуровневый container runtime (по умолчанию runc)
Containerd CRI

7️⃣Сервис cri-o вызывает низкоуровневый container runtime (по умолчанию runc)
cri-o/cri-o

8️⃣Утилита OCI container runtime (по умолчанию runc):

🔘runc с помощью библиотеки libcontainer создает контейнер по runtime-spec, взаимодействуя с подсистемами ядра Linux – пространствами имен (namespaces) и контрольными группами (cgroups)
opencontainers/runc
runc man
opencontainers/runc/libcontainer

🔘crun создает контейнер по runtime-spec, взаимодействуя с подсистемами ядра Linux – пространствами имен (namespaces) и контрольными группами (cgroups)
containers/crun

Docker
Please open Telegram to view this post
VIEW IN TELEGRAM