NuxUI — это фреймворк Go для создания графических приложений.
Уже сейчас можно использовать для создания простых инструментов — например, вот такого конвертера изображений в любой формат:
bmp
, jpg
, png
, ico
, webp
Быстрый старт
git clone https://github.com/nuxui/samples.git
cd github.com/nuxui/samples/widgets
go mod tidy
go build . && ./widgets
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔝 Где искать работу Golang разработчику в различных направлениях
Подборка с каналами, где можно найти вакансии или подработку:
▪Golang jobs
▪Golang jobs chat
▪Data Jobs
▪Data Engeneer/SQL
▪Папка с вакансиями по различным направлениям
@Golang_google
Подборка с каналами, где можно найти вакансии или подработку:
▪Golang jobs
▪Golang jobs chat
▪Data Jobs
▪Data Engeneer/SQL
▪Папка с вакансиями по различным направлениям
@Golang_google
Распределенное хранилище и кэш данных в памяти, написанное на Go.
EchoVault
предоставляет богатый набор структур данных и функций для манипулирования данными в памяти. Репликация является основной функцией EchoVault и реализована с использованием алгоритма RAFT, что позволяет создать отказоустойчивый кластер узлов EchoVault для повышения надежности системы.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📚Библиотеки и инструменты для создания и отправки электронной почты на GO.
▪chasquid - SMTP-сервер, написанный на Go.
▪douceur - CSS-инлайнер для ваших HTML-писем.
▪email - Надежная и гибкая библиотека работы с электронной почтой на Go.
▪email-verifier - Библиотека Go для проверки электронной почты без отправки писем.
▪go-dkim - Библиотека DKIM для подписи и проверки электронной почты.
▪go-email-normalizer - Библиотека Golang для нормализации электронной почты.
▪go-email-validator - Модульный валидатор электронной почты для проверки синтаксиса, содержания, smtp и т. д..
▪go-imap - Библиотека IMAP для клиентов и серверов.
▪go-mail - Простая библиотека Go для отправки писем на Go.
▪go-message - Потоковая библиотека для Internet Message Format и почтовых сообщений.
▪go-premailer - Встраиваемая стилизация для HTML-почты в Go.
▪go-simple-mail - Очень простой пакет для отправки электронной почты с SMTP Keep Alive и двумя таймаутами: Connect и Send.
▪Hectane - Легкий SMTP-клиент, предоставляющий API.
▪hermes - Пакет Golang, генерирующий HTML-письма.
▪Maddy - Почтовый сервер "все в одном" (SMTP, IMAP, DKIM, DMARC, MTA-STS, DANE).
▪mailchain - Отправка зашифрованных писем на адреса блокчейна, написанная на Go.
▪mailgun-go - Библиотека Go для отправки почты с помощью Mailgun API.
▪MailHog - тестирование электронной почты и SMTP с веб-интерфейсом и API.
▪Mailpit - Инструмент тестирования электронной почты и SMTP для разработчиков.
▪mailx - Mailx - это библиотека, которая упрощает отправку электронной почты по SMTP. Она является расширением стандартной библиотеки golang net/smtp.
▪SendGrid - Go-библиотека SendGrid для отправки электронной почты.
▪smtp - Машина состояний протокола SMTP-сервера.
▪smtpmock - Легкий настраиваемый многопоточный тестовый SMTP-сервер. Имитирует любое поведение SMTP в вашей тестовой среде.
▪truemail-go - Настраиваемый валидатор/верификатор электронной почты на языке Golang. Проверяет почту через Regex, DNS, SMTP и многое другое.
@Golang_google
▪chasquid - SMTP-сервер, написанный на Go.
▪douceur - CSS-инлайнер для ваших HTML-писем.
▪email - Надежная и гибкая библиотека работы с электронной почтой на Go.
▪email-verifier - Библиотека Go для проверки электронной почты без отправки писем.
▪go-dkim - Библиотека DKIM для подписи и проверки электронной почты.
▪go-email-normalizer - Библиотека Golang для нормализации электронной почты.
▪go-email-validator - Модульный валидатор электронной почты для проверки синтаксиса, содержания, smtp и т. д..
▪go-imap - Библиотека IMAP для клиентов и серверов.
▪go-mail - Простая библиотека Go для отправки писем на Go.
▪go-message - Потоковая библиотека для Internet Message Format и почтовых сообщений.
▪go-premailer - Встраиваемая стилизация для HTML-почты в Go.
▪go-simple-mail - Очень простой пакет для отправки электронной почты с SMTP Keep Alive и двумя таймаутами: Connect и Send.
▪Hectane - Легкий SMTP-клиент, предоставляющий API.
▪hermes - Пакет Golang, генерирующий HTML-письма.
▪Maddy - Почтовый сервер "все в одном" (SMTP, IMAP, DKIM, DMARC, MTA-STS, DANE).
▪mailchain - Отправка зашифрованных писем на адреса блокчейна, написанная на Go.
▪mailgun-go - Библиотека Go для отправки почты с помощью Mailgun API.
▪MailHog - тестирование электронной почты и SMTP с веб-интерфейсом и API.
▪Mailpit - Инструмент тестирования электронной почты и SMTP для разработчиков.
▪mailx - Mailx - это библиотека, которая упрощает отправку электронной почты по SMTP. Она является расширением стандартной библиотеки golang net/smtp.
▪SendGrid - Go-библиотека SendGrid для отправки электронной почты.
▪smtp - Машина состояний протокола SMTP-сервера.
▪smtpmock - Легкий настраиваемый многопоточный тестовый SMTP-сервер. Имитирует любое поведение SMTP в вашей тестовой среде.
▪truemail-go - Настраиваемый валидатор/верификатор электронной почты на языке Golang. Проверяет почту через Regex, DNS, SMTP и многое другое.
@Golang_google
В любом хорошо структурированном коде большая часть функциональности разбита на небольшие многократно используемые функции.
Юнит-тестирование - это практика проверки этих функций с различными входными данными, чтобы убедиться, что они возвращают ожидаемые результаты во всех случаях.
Такой подход повышает общее качество кода за счет продуманного дизайна API.
Эти тесты обычно автоматизируются и используются для того, чтобы их можно было выполнять многократно.
В этом посте вы узнаете, как реализовать модульные тесты в Go с помощью встроенного в него модуля для тестирования.
К концу этой статьи вы узнаете:
▪Возможности тестирования стандартной библиотеки Go.
▪Как запускать и интерпретировать результаты тестирования.
▪Как решать проблемы неудачных тестов.
▪Как создавать и анализировать отчеты о работе кода.
📌 Статья
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
var endBlock int
row := db.QueryRow(ctx, `select relpages from pg_class where oid = 'table1'::regclass::oid`)
err = row.Scan(&endBlock)
if err != nil {
return
}
startBlock := 0
blocksPerIteration := 50
maxTuplesPerBlock := 150
for {
var rows pgx.Rows
rows, err = db.Query(ctx, `
select id
from table1
where ctid = any (
array(
select format('(%s, %s)', a, b)::tid
from generate_series($1::int, $2::int) a(a)
cross join generate_series(0, $3) b(b)
))
and value = '100000'`,
startBlock,
startBlock+blocksPerIteration,
maxTuplesPerBlock,
)
if err != nil {
return
}
var id int
for rows.Next() {
err = rows.Scan(&id)
if err != nil {
return
}
slog.Info("found row", "id", id)
}
rows.Close()
startBlock += blocksPerIteration
if startBlock > endBlock {
break
}
time.Sleep(100 * time.Millisecond)
}
Некоторые нюансы:
— из-за того что тип
tid
не оптимизирует операции больше/меньше, приходится использовать ctid = any (...)
— для определения
maxTuplesPerBlock
можно использовать запросselect 8096 / min(x)
from (
select pg_column_size(table1) x
from table1 tablesample system(1)
) d
— можно делать не только
select
, но и update
и delete
, но помнить что строки могут и перемещаются как внутри блока, так и между ними@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
В Go отсутствует эргономичная идиоматическая библиотека утилит для итераторов. Пакет построен на основе (rangefunc experiment)[https://go.dev/wiki/RangefuncExperiment] для go 1.22.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Wire — это мощный инструмент для кодогенерации, позволяет обнаруживать проблемы с графом зависимостей во время компиляции.
Преимуществом Wire является то, что контейнер конфигурируется не с помощью каких-то специальных файлов, а непосредственно с помощью кода Go.
Wire основан на 2 понятиях — провайдерах и инжекторах. Программист описывает функцию-инжектор на Go-совместимом языке Wire, декларируя функции-провайдеры, а Wire на основе описания генерирует реальный код инжектора, эти провайдеры использующий.
Установка Wire очень проста:
go install github.com/google/wire/cmd/wire@latest
(убедитесь, что
$GOPATH/bin
добавлена в переменную среды $PATH
)@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Иногда немного меток и
goto
в Go очень кстати, не бойтесь использовать, если это действительно удобноДовольно много разработчиков боятся
goto
как огня, зная «О вреде оператора Go To» от Дейкстры, но важно правильно понимать посыл той статьи и контекстКстати, статья в тему — "О вреде GOTO-фобии"
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Gosseract OCR
Библиотека компьютерного зрения на
▪Github
@Golang_google
Библиотека компьютерного зрения на
Go
для оптического распознавания символов (OCR), использующая библиотеку Tesseract C++▪Github
@Golang_google
Он компилируется в SQL и делает написание сложных SQL-запросов простым и интуитивно понятным.
Как и SQL, данный язык удобочитаемый, явный и декларативный. При этом в отличие от используемого всеми стандарта, PRQL формирует логический конвейер преобразований и поддерживает такие абстракции, как переменные и функции
Разработчики языка с самого старта решили для себя, что их проект будет всегда иметь открытый исходный код и никогда не получит коммерческого варианта. Это делает его ещё более интересным
Основные преимущества
PRQL
заключаются в его концепции линейных трансформаций данных, что делает язык легким для чтения и написанияPRQL
поддерживает современные функции, такие как даты, диапазоны, f-строки, а также функции, проверку типов и улучшенную обработку null-значенийhttps://prql-lang.org
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
𝗧𝗿𝗶𝘃𝘆
— это инструмент от Aqua Security для поиска уязвимостей и ошибок неправильных настроек
𝗦𝗲𝗮𝗹𝗲𝗱 𝗦𝗲𝗰𝗿𝗲𝘁𝘀
— интегрируется в Kubernetes, позволяя расшифровывать конфиденциальные данные только контроллеру Kubernetes, запущенному в Kubernetes, и больше никому. Контроллер расшифрует данные и создаст собственные секреты K8s, которые будут надежно сохранены.
𝗧𝗲𝗿𝗿𝗮𝘀𝗰𝗮𝗻
— статический опенсорсный анализатор кода, созданный на основе OPA. Terrascan может проявлять уязвимость безопасности и нарушение нормативных требований. Инструмент имеет более 500 политик, которые помогают обеспечить надежность для различных программ
𝗞𝘂𝗯𝗲𝗔𝗿𝗺𝗼𝗿
— это система обеспечения безопасности среды выполнения контейнеров, которая ограничивает поведение (например, выполнение процессов, доступ к файлам, сетевые операции и использование ресурсов) контейнеров на системном уровне.
Пользуйтесь)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Обычно разработчики, которые имеют большой бекграунд работы с другими ЯП, склонны использовать
assert
для выявления неожиданных входных данных. В целом, это оправданно, особенно, если мы планируем покрывать проект тестами. Хмм, а что, если просто выкидывать панику, когда есть риск неправильно обработать входные данные? Здесь в коде показано, как это может выглядеть; есть
Assert
, который возвращает ошибку с перечислением всех неудачных утверждений, и есть MustAssert
, который выкидывает панику. Код вдохновлён tigerbeetle Что думаете по этому поводу?
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Полезный инструмент, написанный на Go, для
выгрузки/загрузки
данных с большинства основных СУБД включая облачные, файловых систем и различных файлов данных. ▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
▪Github
#golang #программирование
go install github.com/PeronGH/cli2ssh/cmd/cli2ssh@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Предположим что у нас есть два коннекта к базе (одной или нескольким, это не важно). Далее используя
io.Pipe()
создаём Reader
и Writer
, и используя CopyTo()
и CopyFrom()
переносим данные.r, w := io.Pipe()
doneChan := make(chan struct{}, 1)
go func() {
defer close(doneChan)
_, err := db1.PgConn().CopyTo(ctx, w, `copy table1 to stdin binary`)
if err != nil {
slog.Error("error", "error", err)
return
}
_ = w.Close()
doneChan <- struct{}{}
}()
_, err = db2.PgConn().CopyFrom(ctx, r, `copy table1 from stdout binary`)
_ = r.Close()
select {
case <-doneChan:
case <-ctx.Done():
}
Вся прелесть тут в том что используем наиболее быстрый способ с точки зрения PostgreSQL.
Используя `copy (select * from where ... order by ... limit ...) to stdout `можем регулировать нагрузку на чтение, следить за прогрессом и управлять копированием данных.
В качестве
Reader
может выступать что угодно, хоть файл csv, хоть другая СУБД, но тогда данные придётся дополнительно конвертировать в формат понимаемый PostgreSQL - csv или tsv, и использовать copy ... from stdin (format csv)
.Нюанс:
copy ... from stdin binary
, binary
обязывает использовать одинаковые типы данных, нельзя будет integer
колонку перенести в колонку smallint
, если такое требуется, то параметр binary
надо опустить.Весь код тут. И ещё немного кода для вдохновения.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM