🔥 Упрощение DLL-хайкинга с DllShimmer
DllShimmer позволяет легко добавлять код в экспортируемые функции DLL без нарушения работы программы. Он генерирует C++ и DEF файлы, которые обеспечивают корректное взаимодействие с оригинальной DLL, сохраняя ее структуру.
Экспортируемые функции DLL — это функции, которые библиотека DLL (Dynamic Link Library) делает доступными для использования другими программами.
Когда вы пишете код вы можете собрать его не только в обычный исполняемый .exe, но и в динамическую библиотеку .dll. Такая библиотека хранит набор функций и данных, которые могут вызываться другими приложениями во время выполнения.
🚀Основные моменты:
- Простое создание прокси DLL для внедрения кода.
- Поддержка динамической и статической компоновки.
- Не требует реверс-инжиниринга.
- Сохраняет оригинальные имена и порядковые номера функций.
- Поддержка только x86-64 архитектуры.
📌 GitHub
@golang_google
#go
DllShimmer позволяет легко добавлять код в экспортируемые функции DLL без нарушения работы программы. Он генерирует C++ и DEF файлы, которые обеспечивают корректное взаимодействие с оригинальной DLL, сохраняя ее структуру.
Экспортируемые функции DLL — это функции, которые библиотека DLL (Dynamic Link Library) делает доступными для использования другими программами.
Когда вы пишете код вы можете собрать его не только в обычный исполняемый .exe, но и в динамическую библиотеку .dll. Такая библиотека хранит набор функций и данных, которые могут вызываться другими приложениями во время выполнения.
🚀Основные моменты:
- Простое создание прокси DLL для внедрения кода.
- Поддержка динамической и статической компоновки.
- Не требует реверс-инжиниринга.
- Сохраняет оригинальные имена и порядковые номера функций.
- Поддержка только x86-64 архитектуры.
📌 GitHub
@golang_google
#go
👍12❤7🔥3
🧠 CasCache — CAS-безопасный кэш для Go с валидацией чтения и «bulk»-наборов
Что это
- Кэш «как CAS»: записи защищены поколениями (generation). Запись проходит только если поколение ключа не изменилось.
- Singles: никогда не вернёт «протухшее» значение; битые/чужого типа записи самовосстанавливаются (самоочистка).
- Bulk: кэширует набор ключей; при чтении каждый элемент сверяется с актуальным поколением — если хоть один устарел, весь набор отбрасывается и читается по одиночке.
- Подключаемые провайдеры значений: Ristretto / BigCache / Redis.
- Подключаемые кодеки: JSON/Msgpack/CBOR/Proto (можно навесить компрессию/шифрование).
- Distributed GenStore (опционально): хранит поколения в Redis для корректности между репликами и переживания рестартов.
Зачем это нужно
- Без «грязных» чтений при гонках читателя/писателя.
- Нулевая «write amplification» при чтении — валидация только на чтении.
- Гибкий выбор провайдера/кодека, можно начать локально и дорастить до кластера (с общим GenStore).
Быстрый старт
📌Репозиторий: github.com/unkn0wn-root/cascache
Что это
- Кэш «как CAS»: записи защищены поколениями (generation). Запись проходит только если поколение ключа не изменилось.
- Singles: никогда не вернёт «протухшее» значение; битые/чужого типа записи самовосстанавливаются (самоочистка).
- Bulk: кэширует набор ключей; при чтении каждый элемент сверяется с актуальным поколением — если хоть один устарел, весь набор отбрасывается и читается по одиночке.
- Подключаемые провайдеры значений: Ristretto / BigCache / Redis.
- Подключаемые кодеки: JSON/Msgpack/CBOR/Proto (можно навесить компрессию/шифрование).
- Distributed GenStore (опционально): хранит поколения в Redis для корректности между репликами и переживания рестартов.
Зачем это нужно
- Без «грязных» чтений при гонках читателя/писателя.
- Нулевая «write amplification» при чтении — валидация только на чтении.
- Гибкий выбор провайдера/кодека, можно начать локально и дорастить до кластера (с общим GenStore).
Быстрый старт
import (
"context"
"time"
"github.com/unkn0wn-root/cascache"
rp "github.com/unkn0wn-root/cascache/provider/ristretto"
)
type User struct{ ID, Name string }
func buildCache() cascache.CAS[User] {
rist, _ := rp.New(rp.Config{
NumCounters: 1_000_000,
MaxCost: 64 << 20,
BufferItems: 64,
Metrics: false,
})
cc, _ := cascache.New[User](cascache.Options[User]{
Namespace: "user",
Provider: rist,
Codec: cascache.JSONCodec[User]{},
DefaultTTL: 5 * time.Minute,
BulkTTL: 5 * time.Minute,
// GenStore: nil → локально; для кластера подключите Redis GenStore.
})
return cc
}
func readUser(ctx context.Context, c cascache.CAS[User], id string) (User, bool) {
if u, ok, _ := c.Get(ctx, id); ok { return u, true }
obs := c.SnapshotGen(id) // снять поколение ДО чтения БД
u := loadFromDB(id)
_ = c.SetWithGen(ctx, id, u, obs, 0) // запись пройдёт только если поколение не изменилось
return u, true
}
📌Репозиторий: github.com/unkn0wn-root/cascache
👍12❤9🔥5
Workshop по Go для тех, кто хочет собрать своего собственного кодинг-агента.
Это практический гайд — шаг за шагом показывают, как из Go сделать среду для генерации кода.
По сути похоже на Roo Code, Cline, Amp, Cursor, Windsurf или OpenCode, но в этом гайде упор идет на то, чтобы понять механику изнутри.
@golang_google
#go #golang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤6🔥6
TaskWing — это инструмент для разработчиков, который позволяет вести список задач прямо в терминале и подключать к этому процессу искусственный интеллект (Claude Code, Cursor) через протокол MCP.
- Подключается к AI и помогает создавать, менять и искать задачи.
- Не требует сложной настройки — всё хранится локально.
- Умеет отслеживать зависимости между задачами, чтобы не было конфликтов.
- Делает работу удобной: минимум переключений между редактором и терминалом.
Как использовать:
go install github.com/josephgoksu/taskwing.app@latest
taskwing init
taskwing add --title "Fix auth bug" --priority urgent
📌 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍3🔥3😢2😁1
@golang_google
#go #golang #Kubernetes
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍7🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 LeetSolv — инструмент для тренировки алгоритмов прямо в терминале
LeetSolv — это консольная утилита, написанная нп Go для подготовки к собеседованиям по алгоритмам и структурам данных.
Инструмент помогает повторять задачи по умному расписанию (алгоритм SM-2) и не забывать то, что уже решал.
⚡ Что умеет:
- Лёгкий CLI без лишних зависимостей (написан на Go).
- Планирует повторения задач с учётом:
- насколько хорошо ты знаешь задачу,
- насколько она важна,
- насколько сложно её понять.
- Автоматически выставляет приоритеты: что решать сначала, что можно отложить.
- Полный набор команд: добавить, удалить, редактировать задачи, откатить изменения.
- Все данные хранятся только у тебя локально.
- Два режима работы:
- интерактивный (вопрос-ответ в терминале),
- командный (`add`,
📦 Установка:
📌 Github: https://github.com/eannchen/leetsolv
LeetSolv — это консольная утилита, написанная нп Go для подготовки к собеседованиям по алгоритмам и структурам данных.
Инструмент помогает повторять задачи по умному расписанию (алгоритм SM-2) и не забывать то, что уже решал.
⚡ Что умеет:
- Лёгкий CLI без лишних зависимостей (написан на Go).
- Планирует повторения задач с учётом:
- насколько хорошо ты знаешь задачу,
- насколько она важна,
- насколько сложно её понять.
- Автоматически выставляет приоритеты: что решать сначала, что можно отложить.
- Полный набор команд: добавить, удалить, редактировать задачи, откатить изменения.
- Все данные хранятся только у тебя локально.
- Два режима работы:
- интерактивный (вопрос-ответ в терминале),
- командный (`add`,
list
, search
и т.п.). 📦 Установка:
curl -fsSL https://raw.githubusercontent.com/eannchen/leetsolv/main/install.sh | bash
📌 Github: https://github.com/eannchen/leetsolv
❤28👍9🔥4🤔4
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7🔥3😁1
Библиотека zek позволяет автоматически генерировать Go-структуры из XML-документов.
Полученные структуры идеально подходят для чтения и парсинга XML.
🔗 Repo: https://github.com/miku/zek
#golang #xml #devtools
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31😁16❤4🔥4
🗄️ SQL-редактор в браузере
Запускается как Go HTTP-сервер и открывается прямо в браузере.
Подходит для простых ETL-задач:
- перенос данных между базами
- работа с Excel-таблицами
- поддержка JSON и CSV
⚡ Удобный инструмент, когда нужно быстро и без лишних настроек управлять данными.
👉 https://github.com/a-le/db-portal
#golang
Запускается как Go HTTP-сервер и открывается прямо в браузере.
Подходит для простых ETL-задач:
- перенос данных между базами
- работа с Excel-таблицами
- поддержка JSON и CSV
⚡ Удобный инструмент, когда нужно быстро и без лишних настроек управлять данными.
👉 https://github.com/a-le/db-portal
#golang
👍9❤7🤔3🥰2
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🔥3
🛠 Go tip: как правильно использовать sync.Pool
sync.Pool — это потокобезопасный пул временных объектов в Go. Он помогает переиспользовать объекты, снижая аллокации и нагрузку на GC. Отлично подходит для буферов и временных структур.
⚡ Важные моменты:
- GC может очистить пул — он не вечное хранилище.
- Объекты нужно сбрасывать перед возвратом, иначе вернутся «грязные» данные.
- Для больших или сильно разных по размеру объектов может привести к перерасходу памяти.
✅ Рекомендации:
- Использовать только для короткоживущих и предсказуемых объектов.
- Сбрасывать или обнулять состояние перед Put.
- Профилировать приложение (`pprof`, `MemStats`) и смотреть эффект.
📌 Пример:
👉 Подробнее
sync.Pool — это потокобезопасный пул временных объектов в Go. Он помогает переиспользовать объекты, снижая аллокации и нагрузку на GC. Отлично подходит для буферов и временных структур.
⚡ Важные моменты:
- GC может очистить пул — он не вечное хранилище.
- Объекты нужно сбрасывать перед возвратом, иначе вернутся «грязные» данные.
- Для больших или сильно разных по размеру объектов может привести к перерасходу памяти.
✅ Рекомендации:
- Использовать только для короткоживущих и предсказуемых объектов.
- Сбрасывать или обнулять состояние перед Put.
- Профилировать приложение (`pprof`, `MemStats`) и смотреть эффект.
📌 Пример:
var bufPool = sync.Pool{
New: func() interface{} {
return make([]byte, 1024) // создаём буфер 1КБ
},
}
func process() {
buf := bufPool.Get().([]byte)
defer bufPool.Put(buf[:0]) // сброс длины перед возвратом
// работа с buf...
}
👉 Подробнее
👍20❤11🔥2🤬1
🤯 Вышли Go 1.25.1 и Go 1.24.7!
🔐 Security: исправлена уязвимость в
📣 Анонс: https://groups.google.com/g/golang-announce/c/PtW9VW21NPs/m/DJhMQ-m5AQAJ
⬇️ Скачать: https://go.dev/dl/#go1.25.1
#golang #security #release
@golang_google
🔐 Security: исправлена уязвимость в
net/http
(CVE-2025-47910). 📣 Анонс: https://groups.google.com/g/golang-announce/c/PtW9VW21NPs/m/DJhMQ-m5AQAJ
⬇️ Скачать: https://go.dev/dl/#go1.25.1
#golang #security #release
@golang_google
1👍33❤14🔥7
🛠️ Удобный инструмент для управления кластерами Postgres
Ivory — это инструмент с открытым исходным кодом, который упрощает работу с кластерами Postgres, предоставляя удобный интерфейс для разработчиков и администраторов баз данных. Он позволяет управлять конфигурацией кластера, выполнять запросы и контролировать состояние в одном месте.
🚀 Основные моменты:
- Упрощает управление Postgres кластерами
- Интуитивно понятный интерфейс для основных функций Patroni
- Возможность работы локально или в виртуальной машине
- Поддержка редактирования конфигурации кластера
- Инструменты для диагностики и устранения проблем
📌 GitHub: https://github.com/veegres/ivory
#go
Ivory — это инструмент с открытым исходным кодом, который упрощает работу с кластерами Postgres, предоставляя удобный интерфейс для разработчиков и администраторов баз данных. Он позволяет управлять конфигурацией кластера, выполнять запросы и контролировать состояние в одном месте.
🚀 Основные моменты:
- Упрощает управление Postgres кластерами
- Интуитивно понятный интерфейс для основных функций Patroni
- Возможность работы локально или в виртуальной машине
- Поддержка редактирования конфигурации кластера
- Инструменты для диагностики и устранения проблем
📌 GitHub: https://github.com/veegres/ivory
#go
👍10❤5🔥4
🤖 Создавайте и управляйте AI-агентами с
🚀 Основные моменты:
- 🏗️ Мультиагентная архитектура для создания специализированных агентов.
- 🔧 Поддержка внешних инструментов и API через протокол MCP.
- 🔄 Умная делегирование задач между агентами.
- 📝 Конфигурация в формате YAML для легкости настройки.
- 🌐 Поддержка нескольких AI-провайдеров, включая OpenAI и Anthropic.
📌 GitHub: https://github.com/docker/cagent
@golang_google
cagent
! 🤖cagent
— это мощная платформа для создания и запуска интеллектуальных AI-агентов, каждый из которых может иметь специализированные знания и инструменты. Простота использования позволяет быстро разрабатывать команды виртуальных экспертов для решения сложных задач.🚀 Основные моменты:
- 🏗️ Мультиагентная архитектура для создания специализированных агентов.
- 🔧 Поддержка внешних инструментов и API через протокол MCP.
- 🔄 Умная делегирование задач между агентами.
- 📝 Конфигурация в формате YAML для легкости настройки.
- 🌐 Поддержка нескольких AI-провайдеров, включая OpenAI и Anthropic.
📌 GitHub: https://github.com/docker/cagent
@golang_google
🔥12❤8👍6🤬2
🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
Go: t.me/golang_interview
AI: t.me/ai_machinelearning_big_data
Python: t.me/python_job_interview
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
Go: t.me/golang_interview
AI: t.me/ai_machinelearning_big_data
Python: t.me/python_job_interview
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
❤6👍5🤬1
Он упрощает интеграцию систем через Kafka, сохраняя знакомый подход к настройке, но с преимуществами Go: высокая скорость, простота и минимальные зависимости.
Доступны готовые Docker-образы и примеры через Docker Compose, так что запустить и протестировать можно буквально за пару минут.
🔗 https://github.com/egsam98/kafka-pipe
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍9🔥9
Metrics Server — это легковесный источник метрик ресурсов контейнеров для Kubernetes, предназначенный для поддержки автошкалирования. Он собирает данные о ресурсах с Kubelet и предоставляет их через Metrics API, что упрощает настройку горизонтального и вертикального автошкалирования.
- Эффективное использование ресурсов: 1 мили ядра CPU и 2 МБ памяти на узел
- Поддержка кластеров до 5000 узлов
- Сбор метрик каждые 15 секунд для быстрого автошкалирования
- Не предназначен для мониторинга или других целей, кроме автошкалирования
📌 GitHub: https://github.com/kubernetes-sigs/metrics-server
@golang_google
#golang
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥3😁1
🌐 OrbitDB — распределённая serverless P2P-база данных для децентрализованных приложений
OrbitDB создана для веба без централизованных серверов: блокчейн-систем, локальных оффлайн-сценариев и P2P-приложений.
⚙️ Основные принципы:
- IPFS — хранение данных.
- Libp2p Pubsub — репликация и синхронизация между узлами.
- Merkle-CRDT — гарантирует бесконфликтные записи и объединение данных в условиях многоверсионности.
📊 Типы БД:
- Журнал событий (append-only log)
- Key-Value store
- Документная база
- Индексируемые коллекции
Все они построены на иммутабельном OpLog, который обеспечивает eventual consistency без выделенного сервера.
📌 Github
OrbitDB создана для веба без централизованных серверов: блокчейн-систем, локальных оффлайн-сценариев и P2P-приложений.
⚙️ Основные принципы:
- IPFS — хранение данных.
- Libp2p Pubsub — репликация и синхронизация между узлами.
- Merkle-CRDT — гарантирует бесконфликтные записи и объединение данных в условиях многоверсионности.
📊 Типы БД:
- Журнал событий (append-only log)
- Key-Value store
- Документная база
- Индексируемые коллекции
Все они построены на иммутабельном OpLog, который обеспечивает eventual consistency без выделенного сервера.
📌 Github
❤14🔥6👍4🥰2
Surf предлагает интуитивно понятный и функциональный подход к работе с HTTP-запросами. С поддержкой браузерной имитации, продвинутой безопасности и гибкой системой промежуточного ПО, этот клиент идеально подходит для современных веб-взаимодействий.
- Поддержка имитации браузеров Chrome и Firefox
- Расширенные функции безопасности и TLS
- Полная поддержка HTTP/2 и HTTP/3
- Эффективное управление соединениями и кэширование ответов
- Совместимость со стандартной библиотекой Go
#go
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤13🔥4🤬2😁1
Новый экспериментальный JSON API в Go
В версии Go 1.25 появился новый способ работы с JSON — пакеты
Пока они работают только в экспериментальном режиме: чтобы включить, нужно указать
Зачем это нужно?
Старая библиотека
- Принимает некорректный UTF-8 и дубли ключей в объектах — это нарушает стандарт и может вести к багам.
-
- Сопоставление полей Go-структур нечувствительно к регистру — медленно и запутанно.
- Нет нормального стриминга JSON.
- Есть лишние аллокации и даже квадратичные замедления при рекурсии.
Что изменилось в
- Код разделён на два уровня: синтаксис (`jsontext`) и работа со значениями (`json/v2`). Это упростило и ускорило библиотеку.
- Marshal работает так же быстро, как в старой версии, а Unmarshal стал значительно быстрее.
- Поведение можно тонко настраивать через новые опции.
- Ошибки прошлого (дубли ключей, странное поведение с
📌 Как запустить?
или
Новый API делает работу с JSON быстрее, чище и предсказуемее. Пока он экспериментальный, но, если сообщество даст положительный отклик, то в Go 1.26 или следующей версии json/v2 станет стандартом.
Почитай официальный блог: https://go.dev/blog/jsonv2-exp
@Golang_google
#Go #Golang #JSON #Go125 #encodingjson #jsonv2
В версии Go 1.25 появился новый способ работы с JSON — пакеты
encoding/json/v2
и encoding/json/jsontext
. Пока они работают только в экспериментальном режиме: чтобы включить, нужно указать
GOEXPERIMENT=jsonv2
или собрать проект с тегом goexperiment.jsonv2
.Зачем это нужно?
Старая библиотека
encoding/json
существует с первых версий Go и за годы накопила массу проблем:- Принимает некорректный UTF-8 и дубли ключей в объектах — это нарушает стандарт и может вести к багам.
-
nil`-срезы и карты сериализуются как `null
, хотя логичнее было бы []
или {}
. - Сопоставление полей Go-структур нечувствительно к регистру — медленно и запутанно.
- Нет нормального стриминга JSON.
- Есть лишние аллокации и даже квадратичные замедления при рекурсии.
Что изменилось в
v2
?- Код разделён на два уровня: синтаксис (`jsontext`) и работа со значениями (`json/v2`). Это упростило и ускорило библиотеку.
- Marshal работает так же быстро, как в старой версии, а Unmarshal стал значительно быстрее.
- Поведение можно тонко настраивать через новые опции.
- Ошибки прошлого (дубли ключей, странное поведение с
nil
, нечувствительность к регистру) исправлены.📌 Как запустить?
go run -tags goexperiment.jsonv2 .
или
GOEXPERIMENT=jsonv2 go run .
Новый API делает работу с JSON быстрее, чище и предсказуемее. Пока он экспериментальный, но, если сообщество даст положительный отклик, то в Go 1.26 или следующей версии json/v2 станет стандартом.
Почитай официальный блог: https://go.dev/blog/jsonv2-exp
@Golang_google
#Go #Golang #JSON #Go125 #encodingjson #jsonv2
👍42❤20🔥12