37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
👣 ​​DNSMORPH

Компактный и очень быстрый движок для перестановки доменных имен, написанный на Go.

Он обрабатывает любой домен или поддомен и предоставляет ряд опций конфигурации для настройки перестановок.

Github

#golang #infosec #pentesting #redteam

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 sj (Swagger Jacker)

Функциональный сканер с открытым исходным кодом, написанный на Go, который определяет способ аутентификации на эндпоинтах и отправляет множество разных запросов на каждый, чтобы проверить их работу и проверить наличие ошибок.

Инструмент полезе для пентестеров для поиска слабых аутентификаций.

Слабость означает возможность легкой фальсификации результатов идентификации и аутентификации злоумышленником и выдачи себя за легального пользователя системы с целью получения несанкционированного доступа.

$ go install github.com/BishopFox/sj@latest

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣Go Style Decisions

Это часть серии документов, в которых описывается стиль написания кода Go в Google.

Этот документ является нормативным, но не каноническим, и основывается на руководстве по стилю.

https://google.github.io/styleguide/go/decisions#variable-names

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🦫 Как тестировать приложения Gofr?

Протестируем приложения, созданные в GoFr  — специфическом веб-фреймворке, написанном на Golang.

Модульное тестирование  — это написание для конкретных блоков кода отдельных тестовых функций, которые записываются в файлы с именами, оканчивающимися на _test.go, и распознаются в IDE. Соответствие фактического вывода ожидаемому результату этих функций проверяется утверждениями.

Почему именно модульное тестирование?

Читать
Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Жиза

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 swiss.Map - это порт на Go хэш-таблиц Swiss Tables от Google.

Swiss Tables является реализацией HashMap в стандартной библиотеке Rust.

Основным преимуществом swiss.Map является производительность. swiss.Map имеет такую же или немного лучшую производительность, чем встроенная мапа Go при меньших размерах, и значительно лучшую производительность при больших размерах.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Инструменты для создания GUI на GO

app - Пакет для создания приложений с помощью GO, HTML и CSS. Поддерживает: MacOS, Windows в процессе разработки.
energy - Кроссплатформенная библиотека на основе LCL (Native System UI Control Library) и CEF (Chromium Embedded Framework) (Windows/ macOS / Linux).
fyne - Кроссплатформенный нативный графический интерфейс, разработанный для Go на основе Material Design. Поддерживает: Linux, macOS, Windows, BSD, iOS и Android.
gio - Gio - библиотека для написания кроссплатформенных графических интерфейсов на языке Go. Gio поддерживает все основные платформы: Linux, macOS, Windows, Android, iOS, FreeBSD, OpenBSD и WebAssembly.
go-astilectron - Создание кроссплатформенных GUI-приложений с помощью GO и HTML/JS/CSS (на базе Electron).
go-gtk - Связка Go для GTK.
go-sciter - Связки Go для Sciter: встраиваемый HTML/CSS/скрипт движок для разработки современных настольных пользовательских интерфейсов. Кроссплатформенный.
Goey - Кроссплатформенный агрегатор UI-инструментов для Windows / Linux / Mac. GTK, Cocoa, Windows API
goradd/html5tag - Библиотека для вывода HTML5-кода.
gotk3 - Связка Go для GTK3.
gowd - инсремент для быстрой и простой разработкт пользовательского интерфейса с помощью GO, HTML, CSS и NW.js. Кросс-платформа.
qt - Связка Qt для Go (поддержка Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi).
ui - Платформенно-нативная библиотека GUI для Go. Кроссплатформенная.
unison - унифицированная либа графического пользовательского интерфейса для настольных приложений Go. Поддерживаются macOS, Windows и Linux.
Wails - Настольные приложения для Mac, Windows, Linux с HTML UI, использующие встроенный в ОС HTML-рендерер.
walk - Набор библиотек Windows-приложений для Go.
webview - webview с простой двусторонней привязкой JavaScript (Windows / macOS / Linux).
AppIndicator Go - Связка Go для библиотеки libappindicator3 C.
gosx-notifier - Библиотека уведомлений OSX для Go.
mac-activity-tracker - Библиотека OSX для уведомления о любой (подключаемой) активности на вашей машине.
mac-sleep-notifier - OSX-уведомления о сне/пробуждении в golang.
robotgo - кроссплатформенная система автоматизации графического интерфейса на базе Go Native. Управление мышью, клавиатурой и прочим.
systray - Кроссплатформенная библиотека Go для размещения иконки и меню в области уведомлений.
trayhost - Кроссплатформенная Go-библиотека для размещения иконки на панели задач хост-операционной системы.
zenity - Кроссплатформенная Go-библиотека и CLI для визуализации простых диалоговых окон.
go-gui-projects - Список готовых проектов, с графическим интерфейсом/графикой/ на Go

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔊 Полезные инструменты для работы с аудио.

GoAudio - нативная библиотека обработки аудио в Go.
gosamplerate - привязка libsamplerate для go.
gaad - Go парсер битовых потоков AAC.
id3v2 - Библиотека декодирования и кодирования ID3 для Go.
flac - кодер/декодер на Go с поддержкой потоков FLAC.
malgo - Легкая библиотека для работы с аудио.
minimp3 - библиотека для работы с MP3.
Oto - Низкоуровневая библиотека для воспроизведения звука на различных платформах.
PortAudio - Связка Go для библиотеки ввода/вывода аудио PortAudio.

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

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

В настоящее время Jet поддерживает PostgreSQL, MySQL, CockroachDB, MariaDB и SQLite.

go install github.com/go-jet/jet/v2/cmd/jet@latest

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как распределенная файловая система в Go сократила потребление памяти на 90 %

JuiceFS, написанная на Go и может управлять десятками миллиардов файлов в одном пространстве имен.

Ее движок метаданных использует подход "все в памяти" и достигает великолепной оптимизации памяти, обрабатывая 300 миллионов файлов с 30 ГБ памяти и временем отклика 100 микросекунд.

Такие технологии, как пулы памяти, ручное управление памятью, сжатие каталогов и компактные форматы файлов, позволили сократить использование памяти метаданных на 90 %.

Почитать как это работает

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю

Почитать:
Go 1.22: Rangefunc Experiment
Где изучать Linux в 2024. Бесплатные курсы, книги и ресурсы
Как распределенная файловая система в Go сократила потребление памяти на 90
Adding A Settings Page (Cosplore3D Pt:21)
Go + Hypermedia - A Learning Journey (Part 1)
Delving Deeper: Enriching Microservices with Golang with CloudWeGo
JWT Refresh Token flow from Client point of view
Большая шпаргалка по алгоритмам с собеседований.
Password-less Login in Go from Scratch
Go + hot reload
How a Distributed File System in Go Cut Memory Usage by 90%
Golang Anonymous Functions: A Guide [#Go101]
Funciones Anónimas en Golang [#Go101]
Windows中Golang docker + go.mod
Learning Linux - splice
Robust generic functions on slices

Библиотеки

Паттерн и пакет для Rust-подобной реализации Enum на Go
SQLC + динамические запросы
Gofakeit библиотека для генерации случайных данных
Бенчмарки для драйверов Golang SQLite
Betteralign - это инструмент для обнаружения структур, которые использовали бы меньше памяти, если бы их поля были правильно отсортированы.
Полезные инструменты для работы с аудио.
Инструменты для создания GUI на GO

Посмотреть:

🌐 Golang: Шпаргалка для алгособеса. Алгоритмы сортировки ( 19:18)
🌐 HOT Reloading The Browser With Templ, Tailwind, And Golang ( 07:09)
🌐 How To Build a Complete API In Golang
🌐 Rob Pike: What Golang Got Right & Wrong

Хорошего дня!

@Golang_google
👣 Фреймворк NuxUI

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

🖥 GitHub

@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
👣 EchoVault

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

В любом хорошо структурированном коде большая часть функциональности разбита на небольшие многократно используемые функции.

Юнит-тестирование - это практика проверки этих функций с различными входными данными, чтобы убедиться, что они возвращают ожидаемые результаты во всех случаях.

Такой подход повышает общее качество кода за счет продуманного дизайна API.

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

В этом посте вы узнаете, как реализовать модульные тесты в Go с помощью встроенного в него модуля для тестирования.

К концу этой статьи вы узнаете:
Возможности тестирования стандартной библиотеки Go.
Как запускать и интерпретировать результаты тестирования.
Как решать проблемы неудачных тестов.
Как создавать и анализировать отчеты о работе кода.

📌 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Хитрый способ в PostgreSQL перебрать всю таблицу медленно и аккуратно, но эффективно, используя указатель ссылающийся на конкретный tuple — ctid.

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
👣 it: просто лучшие итераторы для Go

В 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: генерация Go кода с автоматическим управлением зависимостями

Wire — это мощный инструмент для кодогенерации, позволяет обнаруживать проблемы с графом зависимостей во время компиляции.

Преимуществом Wire является то, что контейнер конфигурируется не с помощью каких-то специальных файлов, а непосредственно с помощью кода Go.
Wire основан на 2 понятиях — провайдерах и инжекторах. Программист описывает функцию-инжектор на Go-совместимом языке Wire, декларируя функции-провайдеры, а Wire на основе описания генерирует реальный код инжектора, эти провайдеры использующий.

Установка Wire очень проста:
go install github.com/google/wire/cmd/wire@latest

(убедитесь, что $GOPATH/bin добавлена в переменную среды $PATH)

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Управление Go с помощью goto, break и меток

Иногда немного меток и 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