Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего в Go используются теги структур?
Anonymous Quiz
9%
Для документирования кода
21%
Для управления форматированием вывода
66%
Для добавления метаданных к полям структуры
5%
Для изменения типов данных
#полезное
😊 EzBookkeeping
Это приложение для ведения личных финансов с открытым исходным кодом, предназначенное для самостоятельного хостинга!
🟠 Оно поддерживает работу с базами данных SQLite, MySQL и PostgreSQL, а также развертывание через Docker. Приложение адаптировано для работы как на десктопах, так и на мобильных устройствах, обеспечивая удобный пользовательский интерфейс.
Гитхаб
👉 Новости 👉 Платформа
Это приложение для ведения личных финансов с открытым исходным кодом, предназначенное для самостоятельного хостинга!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как устроены контексты в Go?
Контексты в Go - это механизм для управления жизненным циклом горутин. Они позволяют устанавливать дедлайны, отменять задачи и передавать данные между горутинами. Контексты создаются через функции пакета context и часто используются в сетевых запросах или долгоживущих процессах.
👉 Новости 👉 Платформа
Контексты в Go - это механизм для управления жизненным циклом горутин. Они позволяют устанавливать дедлайны, отменять задачи и передавать данные между горутинами. Контексты создаются через функции пакета context и часто используются в сетевых запросах или долгоживущих процессах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#новости
😊 Приятное улучшение качества жизни в Go 1.24
Команда
Если есть несохранённые изменения, добавляется суффикс
👉 Новости 👉 Платформа
Команда
go build
теперь устанавливает версию главного модуля (BuildInfo.Main.Version) в скомпилированном бинарнике на основе тега или коммита из системы контроля версий.Если есть несохранённые изменения, добавляется суффикс
+dirty
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#видео
🛞 Выжимаем из Go максимум производительности / Никита Галушко (VK, ВКонтакте)
Этот доклад о том, как писать код на Go так, чтобы выжимать максимум производительности.
Смотреть ютуб
👉 Новости 👉 Платформа
Этот доклад о том, как писать код на Go так, чтобы выжимать максимум производительности.
Смотреть ютуб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Зачем нужны транзакции?
Транзакции - это последовательность операций с базой данных, которые выполняются как единое целое. Они обеспечивают четыре свойства (ACID): атомарность, согласованность, изолированность и долговечность. Транзакции гарантируют, что данные будут оставаться в согласованном состоянии даже при сбоях.
👉 Новости 👉 Платформа
Транзакции - это последовательность операций с базой данных, которые выполняются как единое целое. Они обеспечивают четыре свойства (ACID): атомарность, согласованность, изолированность и долговечность. Транзакции гарантируют, что данные будут оставаться в согласованном состоянии даже при сбоях.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 Minecraft from scratch
Этот проект представляет собой клон Minecraft, разработанный «с нуля» на Go с использованием только современного OpenGL.
Он не опирается на готовые игровые движки или фреймворки, что делает его особенно интересным для разработчиков, желающих глубже изучить 3D-графику и принципы создания игр на низком уровне.
Основные возможности проекта
🟠 Процедурная генерация мира
Используется многократно применяемый Perlin noise для создания бесконечного, процедурно генерируемого ландшафта. Присутствует система биомов, генерация пещер, деревьев и даже простейших систем формирования рельефа.
🟠 Физический движок
Реализована своя физика с обнаружением столкновений, обработкой столкновений и динамикой твердых тел. Это позволяет корректно обрабатывать прыжки, столкновения игрока с окружающими объектами и другие физические взаимодействия.
🟠 Графика и рендеринг
Приложение написано с использованием OpenGL 4.1. Реализованы собственные шейдерные программы для отрисовки блоков, UI-элементов и эффектов, а также применяются методы отсечения (view frustum culling) для оптимизации рендеринга.
🟠 Игровой цикл и механика
В проекте присутствует смена дня и ночи, динамическое освещение, а также возможность размещения и удаления блоков, что имитирует базовую механику игры Minecraft. Также предусмотрены такие элементы, как инвентарь игрока и режим полёта.
🟠 Динамическая загрузка чанков
Мир разбит на чанки, которые подгружаются и выгружаются динамически в зависимости от положения игрока, что помогает снизить нагрузку на систему и обеспечить плавную работу даже в больших мирах.
Архитектура
Код организован по принципу компонентного подхода:
🔴 World и World Generator отвечают за генерацию чанков, ландшафта и размещение объектов (деревьев, пещер и т.д.).
🔴 Physics Engine содержит реализацию динамики, обработки столкновений и расчётов движения.
Рендеринг: система отрисовки, которая включает шейдеры, оптимизацию через отсечение невидимых объектов и поддержку динамического освещения.
🔴 Система управления включает обработку ввода с клавиатуры и мыши, что позволяет управлять персонажем, переключать режимы (например, полёта) и взаимодействовать с миром.
Гитхаб
👉 Новости 👉 Платформа
Этот проект представляет собой клон Minecraft, разработанный «с нуля» на Go с использованием только современного OpenGL.
Он не опирается на готовые игровые движки или фреймворки, что делает его особенно интересным для разработчиков, желающих глубже изучить 3D-графику и принципы создания игр на низком уровне.
Основные возможности проекта
Используется многократно применяемый Perlin noise для создания бесконечного, процедурно генерируемого ландшафта. Присутствует система биомов, генерация пещер, деревьев и даже простейших систем формирования рельефа.
Реализована своя физика с обнаружением столкновений, обработкой столкновений и динамикой твердых тел. Это позволяет корректно обрабатывать прыжки, столкновения игрока с окружающими объектами и другие физические взаимодействия.
Приложение написано с использованием OpenGL 4.1. Реализованы собственные шейдерные программы для отрисовки блоков, UI-элементов и эффектов, а также применяются методы отсечения (view frustum culling) для оптимизации рендеринга.
В проекте присутствует смена дня и ночи, динамическое освещение, а также возможность размещения и удаления блоков, что имитирует базовую механику игры Minecraft. Также предусмотрены такие элементы, как инвентарь игрока и режим полёта.
Мир разбит на чанки, которые подгружаются и выгружаются динамически в зависимости от положения игрока, что помогает снизить нагрузку на систему и обеспечить плавную работу даже в больших мирах.
Архитектура
Код организован по принципу компонентного подхода:
Рендеринг: система отрисовки, которая включает шейдеры, оптимизацию через отсечение невидимых объектов и поддержку динамического освещения.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 639. Decode Ways II
Сообщение, содержащее буквы от A-Z, может быть закодировано в цифры с помощью следующего отображения: 'A' -> "1" 'B' -> "2" ... 'Z' -> "26" Чтобы декодировать закодированное сообщение, все цифры должны быть сгруппированы, а затем снова преобразованы в буквы с помощью обратного отображения (может быть несколько способов). Например, "11106" может быть преобразовано в: "AAJF" с группировкой (1 1 10 6) "KJF" с группировкой (11 10 6) Обратите внимание, что группировка (1 11 06) недействительна, поскольку "06" не может быть преобразовано в "F", так как "6" отличается от "06". В дополнение к вышеуказанным преобразованиям кодированное сообщение может содержать символ "*", который может представлять любую цифру от "1" до "9" ("0" исключается). Например, кодированное сообщение "1*" может представлять любое из кодированных сообщений "11", "12", "13", "14", "15", "16", "17", "18" или "19". Декодирование "1*" эквивалентно декодированию любого из кодированных сообщений, которые оно может представлять. Если задана строка s, состоящая из цифр и символов '*', верните количество способов ее декодирования. Поскольку ответ может быть очень большим, верните его по модулю 109 + 7.
Пример:
👨💻 Алгоритм:
1⃣ Инициализация
Создайте массив dp, где dp[i] представляет количество способов декодирования подстроки s[0:i]. Установите начальные значения dp[0] = 1 (пустая строка имеет один способ декодирования).
2⃣ Обход строки
Используйте цикл для обхода строки и вычисления количества способов декодирования для каждого символа, включая обработку символа '*'.
3⃣ Модульное вычисление
Поскольку количество способов декодирования может быть большим, вычисляйте результаты по модулю 10^9 + 7.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 639. Decode Ways II
Сообщение, содержащее буквы от A-Z, может быть закодировано в цифры с помощью следующего отображения: 'A' -> "1" 'B' -> "2" ... 'Z' -> "26" Чтобы декодировать закодированное сообщение, все цифры должны быть сгруппированы, а затем снова преобразованы в буквы с помощью обратного отображения (может быть несколько способов). Например, "11106" может быть преобразовано в: "AAJF" с группировкой (1 1 10 6) "KJF" с группировкой (11 10 6) Обратите внимание, что группировка (1 11 06) недействительна, поскольку "06" не может быть преобразовано в "F", так как "6" отличается от "06". В дополнение к вышеуказанным преобразованиям кодированное сообщение может содержать символ "*", который может представлять любую цифру от "1" до "9" ("0" исключается). Например, кодированное сообщение "1*" может представлять любое из кодированных сообщений "11", "12", "13", "14", "15", "16", "17", "18" или "19". Декодирование "1*" эквивалентно декодированию любого из кодированных сообщений, которые оно может представлять. Если задана строка s, состоящая из цифр и символов '*', верните количество способов ее декодирования. Поскольку ответ может быть очень большим, верните его по модулю 109 + 7.
Пример:
Input: s = "*"
Output: 9
Создайте массив dp, где dp[i] представляет количество способов декодирования подстроки s[0:i]. Установите начальные значения dp[0] = 1 (пустая строка имеет один способ декодирования).
Используйте цикл для обхода строки и вычисления количества способов декодирования для каждого символа, включая обработку символа '*'.
Поскольку количество способов декодирования может быть большим, вычисляйте результаты по модулю 10^9 + 7.
package main
import (
"fmt"
)
func numDecodings(s string) int {
const MOD = 1000000007
n := len(s)
dp := make([]int, n+1)
dp[0] = 1
for i := 1; i <= n; i++ {
if s[i-1] == '*' {
dp[i] = 9 * dp[i-1]
} else if s[i-1] != '0' {
dp[i] = dp[i-1]
}
if i > 1 {
if s[i-2] == '*' {
if s[i-1] == '*' {
dp[i] += 15 * dp[i-2]
} else if s[i-1] >= '0' && s[i-1] <= '6' {
dp[i] += 2 * dp[i-2]
} else {
dp[i] += dp[i-2]
}
} else if s[i-2] == '1' {
if s[i-1] == '*' {
dp[i] += 9 * dp[i-2]
} else {
dp[i] += dp[i-2]
}
} else if s[i-2] == '2' {
if s[i-1] == '*' {
dp[i] += 6 * dp[i-2]
} else if s[i-1] >= '0' && s[i-1] <= '6' {
dp[i] += dp[i-2]
}
}
}
dp[i] %= MOD
}
return dp[n]
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 В чем разница процесса и потока в рамках операционной системы?
Процесс - это независимая программа, выполняющаяся в памяти, у которой есть собственное адресное пространство. Поток — это единица выполнения внутри процесса, которая использует общее адресное пространство. Потоки легче создавать и переключать, но процессы изолированы друг от друга.
👉 Новости 👉 Платформа
Процесс - это независимая программа, выполняющаяся в памяти, у которой есть собственное адресное пространство. Поток — это единица выполнения внутри процесса, которая использует общее адресное пространство. Потоки легче создавать и переключать, но процессы изолированы друг от друга.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Google OAuth 2.0 в Go и React.js
OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.
🚩 Настройка Google Cloud:
Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.
🚩 Бэкенд на Go:
🟡 Используйте пакет
🟡 Настройте маршруты: /login, /callback, /logout.
🟡 Храните access_token и refresh_token в httpOnly cookies.
Пример
🚩 Фронтенд на React:
🔵 Создайте AuthProvider с контекстом.
🔵 Настройте Axios-интерцепторы для обновления токенов:
🚩 Ошибки и нюансы:
🟣 Используйте httpOnly cookies для безопасности.
🟣 Не храните client_secret на фронтенде.
🟣 Обновляйте токены до их истечения, чтобы избежать разлогина пользователей.
Подробный гайд
👉 Новости 👉 Платформа
OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.
Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.
golang.org/x/oauth2
.Пример
conf := &oauth2.Config{ClientID: "...", RedirectURL: "..."}
url := conf.AuthCodeURL("state")
axios.interceptors.response.use(resp => resp, async error => { ... });
Подробный гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Параллельный шаблон потоковой обработки в Go: как значительно быстрее сканировать большие хранилища S3 или GCS
Статья объясняет, как ускорить перечисление файлов в S3 и GCS, используя параллельную обработку в Go.
Стандартные методы обходят файлы последовательно, что замедляет процесс при работе с миллионами объектов. Автор предлагает разбивать пространство имен бакета на диапазоны и обрабатывать их горутинами, сокращая время сканирования.
В статье приводится пример реализации с библиотекой Rill, а также советы по настройке количества потоков для максимальной производительности.
Подробности здесь
👉 Новости 👉 Платформа
Статья объясняет, как ускорить перечисление файлов в S3 и GCS, используя параллельную обработку в Go.
Стандартные методы обходят файлы последовательно, что замедляет процесс при работе с миллионами объектов. Автор предлагает разбивать пространство имен бакета на диапазоны и обрабатывать их горутинами, сокращая время сканирования.
В статье приводится пример реализации с библиотекой Rill, а также советы по настройке количества потоков для максимальной производительности.
Подробности здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Kong – мощный и удобный command-line парсер для Go
Если вы разрабатываете CLI-приложения на Go, то наверняка сталкивались с необходимостью поддерживать сложные иерархии команд с минимальными усилиями. Именно для этого создан Kong.
Основные преимущества
🟠 Поддержка сложных структур команд: Kong позволяет легко реализовать вложенные команды, флаги и аргументы, обеспечивая гибкость даже для очень сложных CLI-интерфейсов.
🟠 Минимальные усилия для разработчика: Благодаря декларативному синтаксису и использованию структур с тегами, настройка и расширение функционала осуществляется с минимальными затратами кода.
🟠 Автоматическая генерация справки: Инструмент автоматически формирует подробные сообщения о использовании (help), что упрощает поддержку и документацию вашего приложения.
🟠 Высокая производительность и надёжность: Kong спроектирован с учётом лучших практик Go-разработки, что делает его быстрым и стабильным решением для ваших проектов.
Разработка CLI-интерфейсов может быть утомительной, особенно когда требуется реализовать поддержку множества команд и опций.
Kong решает эту проблему, сводя настройку сложных структур к минимально необходимому коду, позволяя сконцентрироваться на бизнес-логике приложения.
Этот инструмент подойдёт как для небольших утилит, так и для крупных проектов, требующих продвинутого управления командами.
Гитхаб
👉 Новости 👉 Платформа
Если вы разрабатываете CLI-приложения на Go, то наверняка сталкивались с необходимостью поддерживать сложные иерархии команд с минимальными усилиями. Именно для этого создан Kong.
Основные преимущества
Разработка CLI-интерфейсов может быть утомительной, особенно когда требуется реализовать поддержку множества команд и опций.
Kong решает эту проблему, сводя настройку сложных структур к минимально необходимому коду, позволяя сконцентрироваться на бизнес-логике приложения.
Этот инструмент подойдёт как для небольших утилит, так и для крупных проектов, требующих продвинутого управления командами.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как работает Select?
👉 Новости 👉 Платформа
select
в Go используется для выбора одного из доступных каналов, готовых к отправке или получению данных. Он блокируется до тех пор, пока хотя бы один канал не станет доступным, или выполняет случайный выбор, если доступно несколько каналов.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 Machbase Neo
Это высокопроизводительная база данных временных рядов, специально разработанная для приложений Интернета вещей (IoT)!
🟠 Она объединяет в себе функции хранения временных данных, поддержку протоколов MQTT и HTTP, а также инструменты для визуализации данных, что делает её универсальным решением для построения IoT-платформ.
Гитхаб
👉 Новости 👉 Платформа
Это высокопроизводительная база данных временных рядов, специально разработанная для приложений Интернета вещей (IoT)!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM