Было опрошено 500 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
Схема взаимодействия контейнерных технологий в рамках работы с привычными инструментами может быть представлена так:
podman
с помощью Libpod API обращается к библиотеке libpod
, которая вызывает низкоуровневый container runtime
(по умолчанию утилиту runc
)containers/podman
Podman Commands
docker
с помощью Docker API вызывает сервис dockerd
docker/cli
Docker CLI reference
Docker architecture
Docker API
dockerd
вызывает сервис containerd
Dockerd reference
containerd
вызывает низкоуровневый container runtime
(по умолчанию утилиту runc
)containerd/containerd
Containerd Scope and principles
kubelet
с помощью протокола CRI вызывает сервис container runtime
(например, containerd
или crio
)Container Runtime Interface
Container Runtimes
CRI: the Container Runtime Interface
containerd
вызывает низкоуровневый container runtime
(по умолчанию runc
)Containerd CRI
cri-o
вызывает низкоуровневый container runtime
(по умолчанию runc
)cri-o/cri-o
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
Известная валюта TON, связанная с Telegram, подобралась к $5.
Полезная статья для тех, кто активно работает с блокчейном TON.
В этой статье описывается:
▪Статья
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Apache Dev Lake - это платформа данных разработчиков с открытым исходным кодом, которая позволяет собирать, анализировать и визуализировать данные из различных инструментов DevOps.
Apache DevLake предназначен для команд разработчиков, которые хотят лучше разобраться в процессе разработки и внедрить в свою практику основанный на данных подход.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Эмбеддинг - это способ преобразования чего-то абстрактного, например слов или изображений в набор чисел и векторов.
Vector("King") - Vector("Man") + Vector("Woman") = Vector("Queen")
#golang #machinelearning
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🦾 Лучшие Golang библиотеки для создания ботов
Библиотеки для создания ботов и работы с ними.
▪bot - библиотека для создания Telegram-ботов с нулевыми зависимостями.
▪echotron - Элегантная и мощная библиотека для Telegram-ботов .
▪ephemeral-roles - создание Discord ботов
▪go-chat-bot - IRC, Slack и Telegram-бот, написанный на Go.
▪go-joe - Библиотека ботов общего назначения, вдохновленная Hubot, но написанная на Go.
▪go-sarah - фреймворк для создания бота для LINE, Slack, Gitter и других платформ
▪go-tg - форк официальной клиентской библиотеки docs Go для доступа к Telegram Bot API.
▪go-tgbot - оболочка Golang Telegram Bot API.
▪go-twitch-irc - библиотека для написания ботов для twitch.tv чата
▪golang CryptoTrading Bot - Реализация консольного торгового бота на базе golang для криптовалютных бирж.
▪govkbot - Простая библиотека ботов Go VK.
▪hanu - фреймворк для написания Slack-ботов.
▪kelp - официальный торговый и бот для Stellar DEX. Работает "из коробки", написан на Golang, совместим с централизованными биржами и пользовательскими торговыми стратегиями.
▪larry - Larry 🐦 - простой генератор твиттер-ботов, который публикует твиты из случайных репозиториев с Github.
▪margelet - фреймворк для создания ботов Telegram.
▪micha - Библиотека Go для Telegram bot api.
▪olivia - Чат-бот, созданный с использованием искусственной нейронной сети.
▪slack-bot - Готовый к использованию Slack-бот для ленивых разработчиков
▪slacker - простой в использовании фреймворк для создания Slack-ботов.
▪slackscot - еще один фреймворк для создания Slack-ботов.
▪tbot - бот-сервер Telegram с API, похожим на net/http.
▪telebot - бот-фреймворк Telegram написан на Go.
▪telego - библиотека Telegram Bot API для Golang
▪telegram-bot-api - простой и понятный клиент Telegram bot.
▪teleterm - Telegram Bot Exec.
▪tenyks - сервис-ориентированный IRC-бот, использующий Redis и JSON для обмена сообщениями.
▪wayback - бот для Telegram, Mastodon, Slack и других платформ обмена сообщениями.
@Golang_google
Библиотеки для создания ботов и работы с ними.
▪bot - библиотека для создания Telegram-ботов с нулевыми зависимостями.
▪echotron - Элегантная и мощная библиотека для Telegram-ботов .
▪ephemeral-roles - создание Discord ботов
▪go-chat-bot - IRC, Slack и Telegram-бот, написанный на Go.
▪go-joe - Библиотека ботов общего назначения, вдохновленная Hubot, но написанная на Go.
▪go-sarah - фреймворк для создания бота для LINE, Slack, Gitter и других платформ
▪go-tg - форк официальной клиентской библиотеки docs Go для доступа к Telegram Bot API.
▪go-tgbot - оболочка Golang Telegram Bot API.
▪go-twitch-irc - библиотека для написания ботов для twitch.tv чата
▪golang CryptoTrading Bot - Реализация консольного торгового бота на базе golang для криптовалютных бирж.
▪govkbot - Простая библиотека ботов Go VK.
▪hanu - фреймворк для написания Slack-ботов.
▪kelp - официальный торговый и бот для Stellar DEX. Работает "из коробки", написан на Golang, совместим с централизованными биржами и пользовательскими торговыми стратегиями.
▪larry - Larry 🐦 - простой генератор твиттер-ботов, который публикует твиты из случайных репозиториев с Github.
▪margelet - фреймворк для создания ботов Telegram.
▪micha - Библиотека Go для Telegram bot api.
▪olivia - Чат-бот, созданный с использованием искусственной нейронной сети.
▪slack-bot - Готовый к использованию Slack-бот для ленивых разработчиков
▪slacker - простой в использовании фреймворк для создания Slack-ботов.
▪slackscot - еще один фреймворк для создания Slack-ботов.
▪tbot - бот-сервер Telegram с API, похожим на net/http.
▪telebot - бот-фреймворк Telegram написан на Go.
▪telego - библиотека Telegram Bot API для Golang
▪telegram-bot-api - простой и понятный клиент Telegram bot.
▪teleterm - Telegram Bot Exec.
▪tenyks - сервис-ориентированный IRC-бот, использующий Redis и JSON для обмена сообщениями.
▪wayback - бот для Telegram, Mastodon, Slack и других платформ обмена сообщениями.
@Golang_google
С этой статьей вы углубитесь во внутренние компоненты и посмотрите, как работают слайсы под капотом.
🔗 Подобнее
#golang #junior
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🗡 Katana
next-generation GO фреймворк для сканирования, парсинга веб-приложений и поиска необходимой информации.
📌 Github
@Golang_google
next-generation GO фреймворк для сканирования, парсинга веб-приложений и поиска необходимой информации.
📌 Github
@Golang_google
Perl:
$l=~s/\A([^\s]+?) - - \[([^\]]+?)\] \"([^\"]+?)\" ([^\s]+?) ([^\s]+?) \"([^\"]+?)\"(.+)/$1\n$2\n$3\n$4\n$5\n$6\n$7/g;
($ip, $time, $page, $code, $size, $ref, $agent, $els) = split(/\n/, $l);
$page=~s/(GET|HEAD|POST) (.+) (HTTP.+)/$2/;
$hash{$page}++;
Go:
log_format := `^([^ ]+) (-) (-) \[([^\]]+)\] "([^\"]+?)" ([0-9]+) ([^ ]+) "([^"])*" "([^"]*)"`
logParser := regexp.MustCompilePOSIX(log_format)
log_format_get := `^(GET|HEAD|POST) (.+) (HTTP.+)$`
logParserGet := regexp.MustCompilePOSIX(log_format_get)
var hash = make(map[string] int);
analize1 := func (iline *string) {
submatch := logParser.FindSubmatch(strings.TrimSpace(*iline))
if (len(submatch[0])>0){
pg := logParserGet.FindAllStringSubmatch(strings.TrimSpace(submatch[0][5]), 1)
if (len(pg)>0){
hash[pg[0][2]]++
}
}
А вот на картинке тест скорости в разных языках.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
#golang
Если вам необходимо добавить функциональность JavaScript в свой проект на Go, просто воспользуйтесь goja - движком ECMAScript/JavaScrip.
Этот инструмент позволяет интегрировать JavaScript непосредственно в Go проекты, без необходимости использования внешних JS-движков👇
📌 Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Итак, сразу к сути.
Несколько экземпляров приложения могут стучаться к флуд-контролю, поэтому нужно использовать какую-нибудь БД.
timestamp
, т.к. обновление данных очень частое, следовательно перестройка индексов будет занимать много времени.userID
), а также любого числового значения (количество запросов во время timestamp
); плюс наличие агрегации, автоматического удаления старых меток и готовой concurrency - если в один timestamp
появится несколько нажатий, то они складываются. Осталось лишь написать это на Go.github.com/redis/go-redis
. В переменные окружения нужно добавить следующие переменные:FC_REDIS_HOST=localhost
FC_REDIS_PORT=6379
FC_REDIS_PASSWORD=strongpassword
FC_RETENTION=5
FC_MAXCHECKS=4
FC_RETENTION
и FC_MAXCHECKS
, кстати, можно прописать прямо в коде. FC_RETENTION
- количество секунд, за которые можно сделать не более FC_MAXCHECKS
запросов.redisClient := redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%s", FC_REDIS_HOST, FC_REDIS_PORT),
Password: FC_REDIS_PASSWORD,
DB: 0,
})
ctx := context.Background()
var rfc FloodControl = &fc.RedisFloodController{
Client: redisClient,
RetentionSeconds: FC_RETENTION,
MaxChecks: FC_MAXCHECKS,
}
v, err := rfc.Check(ctx, 1234567890)
docker-compose.yml
для запуска redis с timeseries.RedisFloodController.Check
аккуратно возвращает ошибки, не роняя приложение, что важно в проде.cp .env.sample .env
export $(xargs < .env)
docker compose -f docker-compose.yml up -d
go run .
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование Docker не обязательно должно быть принципом «все или ничего». Вы можете использовать Docker для развертывания и создания образов для продакшн, но вам не обязательно использовать его в разработке.
Каждая инструкция в вашем Dockerfile приводит к созданию слоя изображения. Docker использует слои для повторного использования работы. Слои кэшируются и их не нужно пересобирать, если:
— Все предыдущие слои не изменяются.
— В случае инструкции
COPY
: файлы/папки не изменяются.— В случае всех остальных инструкций: текст команды не изменяется.
Представьте, что у нас есть следующий фрагмент Dockerfile:
RUN mkdir /code
COPY code code/
RUN pip install code/requirements.txt
Каждый раз, когда что-либо в каталоге кода меняется, вторую строку необходимо запускать заново, а также каждую последующую строку.
Вот как мы могли бы избежать повторного запуска этапа установки при каждом изменении кода:
RUN mkdir /code
COPY code/requirements.txt code/
RUN pip install code/requirements.txt
COPY code /code
Во-первых, проверьте, не загружаете ли вы зависимости разработки, которые вообще не нужны вашему образу.
Ещё нужно помнить про поведение менеджера пакетов на уровне ОС. Например, `apt`который используется в Ubuntu и Debian, по умолчанию устанавливает «рекомендуемые» пакеты.
Вы можете избежать этого, добавив к
apt-get install
флаг --no-install-recommends
BuildKit — это новый механизм сборки образов, который можно использовать вместо стандартного Docker. С ним вы получаете больше параллелизма и эффективности кэширования, плюс новые интересные функции
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM