Репозиторий https-cert-go решает приземленную задачу получить сертификат для локальной разработки без плясок с OpenSSL и длинными командами.
Пример:
import https "github.com/romance-dev/https-cert-go"
pub, priv, _ := https.GenerateKeys(https.GenerateOptions{Host: "proglib.io"})
Самоподписанные сертификаты обычно используют для локальных UI сервисов и внутренних API которые не торчат в интернет.
Для боевого окружения поверх такого решения можно позже подключить полноценный ACME клиент вроде autocert или внешнюю CA, не меняя радикально код сервера.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍11👾1
Есть задача с собеседования: нужно поделить два целых числа без операций деления, умножения и остатка. При этом результат должен поместиться в 32 битный int. На практике это проверка на умение работать с битами и помнить про переполнения
Разложим как на доске:
• Есть
dividend и divisor нужно вернуть целую часть деления с усечением к нулю. Делитель не равен нулю вычисления в диапазоне от минус два в тридцать первой до два в тридцать первой минус один. • Можно в лоб вычитать divisor из dividend пока остаток не стал меньше делителя и считать шаги но это пролёт по времени и не работает на больших входах.
Главная идея — не вычитать делитель по одному разу, а вычитать сразу большие куски вида divisor умноженный на степень двойки. В двоичном мире умножение на степень двойки — это просто сдвиг влево, поэтому divisor << k не нарушает запрет на оператор умножения.
Алгоритм выглядит так:
1. Сначала обрабатываем спец случай, когда делимое равно минимальному int, а делитель равен минус один. В этом случае ответ теоретически равен 231231 и не помещается в int, поэтому по условию возвращаем максимальный int.
2. Далее определяем знак результата через сравнение знаков делимого и делителя, сами значения приводим к модулю и переводим в int64, чтобы безопасно сдвигать и вычитать.
3. Затем имитируем двоичное деление. Идём по битам от 31 до 0 и, если текущий делитель, сдвинутый на этот бит, все еще не больше остатка делимого, вычитаем его и прибавляем к ответу соответствующую степень двойки.
4. В конце возвращаем результат с правильным знаком и проверяем, что он все еще внутри диапазона 32 битного int.
Код:
func divide(dividend int, divisor int) int {
const (
intMax = 1<<31 - 1
intMin = -1 << 31
)
// Спец случай переполнения
if dividend == intMin && divisor == -1 {
return intMax
}
// Определяем знак результата
neg := (dividend < 0) != (divisor < 0)
// Работаем с модулями в int64
a := int64(dividend)
b := int64(divisor)
if a < 0 {
a = -a
}
if b < 0 {
b = -b
}
var res int64
// Долгое деление в двоичном виде
for bit := 31; bit >= 0; bit-- {
if (b<<bit) <= a {
a -= b << bit
res += 1 << bit
}
}
if neg {
res = -res
}
if res > int64(intMax) {
return intMax
}
if res < int64(intMin) {
return intMin
}
return int(res)
}
По времени мы тратим O(log n), а по памяти константу, ведь всё делается на месте.
📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔12👍4🥱3❤2
Конкурентность, которая не блокирует бюджет
В Go мы любим простоту и эффективность. Наша новогодняя акция работает так же: никаких сложных условий и скрытых аллокаций памяти.
Ты берешь 3 курса, а платишь за 1.
Оплата по самому дорогому курсу в наборе, два других — бесплатно.
Что усилит Go-разработчика:
— архитектуры и шаблоны проектирования (микросервисы сами себя не построят);
— алгоритмы и структуры данных.
Запустить горутину обучения
Таймаут контекста: 31 декабря.
Помощь с выбором: @manager_proglib
В Go мы любим простоту и эффективность. Наша новогодняя акция работает так же: никаких сложных условий и скрытых аллокаций памяти.
Ты берешь 3 курса, а платишь за 1.
Оплата по самому дорогому курсу в наборе, два других — бесплатно.
Что усилит Go-разработчика:
— архитектуры и шаблоны проектирования (микросервисы сами себя не построят);
— алгоритмы и структуры данных.
Запустить горутину обучения
Таймаут контекста: 31 декабря.
Помощь с выбором: @manager_proglib
👾1
До Go 1.13 ошибок касались двумя инструментами: сравнение
err == someErr и type assertion через err.(MyErrorType). Это работало пока ошибки были плоскими значениями, но сломалось в тот момент, когда в язык завезли нормальное оборачивание ошибок с контекстом.Проблема с
err == someErr в том, что оно сравнивает конкретное значение, а не суть ошибки. Как только начали делать fmt.Errorf("connect db: %w", err) или свои обертки с Unwrap, верхний err уже не равен исходному значению, несмотря на то, что логически это та же ошибка. Нужен был стандартный способ раскрыть цепочку оберток и проверить лежит ли внутри нужная ошибка. Именно это делает
errors.Is — проходится по цепочке через Unwrap и сравнивает каждое звено, пока не найдет нужный err или не упрется в nil.Аналогичная история с типами. До Go 1.13 приходилось делать каскады type assertion или ручным образом проходить по цепочке unwrap’ов чтобы найти конкретный тип ошибки.
errors.As формализует этот паттерн — он проходит по цепочке ошибок и пытается привести каждую к нужному типу, а при успехе заполняет ваш target. Простым языком
errors.Is — это сравнение с константной ошибкой, а errors.As — это типовая проверка с учетом оберток.📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6
Eletrize — это утилита для live reload, которая следит за файлами, пересобирает и перезапускает приложение при изменениях кода.
Идея возникла как замена Realize после того как команды автора столкнулись с проблемами установки и рандомными падениями этого тулза. В ответ он собрал Eletrize с упором на предсказуемый запуск, конфигурацию через отдельный файл и удобную интеграцию с VS Code launch конфигами.
Пример конфига:
schema:
- label: API
workdir: ""
envs:
key: "value"
env_file: ".env"
watcher:
path: "."
recursive: true
excluded_paths:
- "frontend"
extensions:
- ".go"
commands:
build:
method: "go"
args:
- "build"
envs:
key: "value"
env_file: ""
run:
- method: "./server"
envs:
PORT: "8080"
env_file: ""
Если не хочется тянуть тяжелые dev окружения вроде Docker compose для каждого pet проекта, Eletrize выглядит как вариант легкого live reload поверх стандартного
go build && ./app, который можно использовать и с другими языками.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3❤🔥2
🔎 Автоотклики, мок интервью и трекер откликов для IT специалистов
Классическая схема «обновить резюме и закинуть пару откликов» перестала работать даже на локальном рынке, не говоря уже о международном.
Библиотека программиста собрала 15 AI сервисов, которые закрывают весь цикл поиска работы за рубежом от портфолио и автоподачи откликов до имитации собеседований.
➡️ Список сервисов
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Классическая схема «обновить резюме и закинуть пару откликов» перестала работать даже на локальном рынке, не говоря уже о международном.
Библиотека программиста собрала 15 AI сервисов, которые закрывают весь цикл поиска работы за рубежом от портфолио и автоподачи откликов до имитации собеседований.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Junior Go-Developer — от 140 000 ₽. Скидывайте другу, который всё никак не может вкатиться.
Middle Backend Developer — от 4 000 €
Go Tech Lead — от 400 000 ₽. Отличная возможность выйти на следующую ступень.
📍 Навигация: Вакансии • Задачи • Собесы
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
Go команда выкатили Go 1.26 RC1 и просят гоферов прогнать на нём нагрузки и тесты. Это тот самый момент, когда можно поймать баги регресса заранее и заодно подготовиться к нововведениям до финального релиза.
В 1.26 заметный упор на производительность и рантайм к примеру, ускорили cgo вызовы и мелкие аллокации. Если у вас есть прод на Go, сейчас хороший момент добавить ещё один CI job на go1.26rc1 и посмотреть, как себя ведут сборка, тесты и перфоманс.
Попробовать:
go install golang.org/dl/go1.26rc1@latest
go1.26rc1 download
Команда отдельно напоминает про телеметрию можно включить её командой:
go telemetry on
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔1
Идея положить данные в контекст и достать их через пару вызовов глубже звучит привлекательно. Код чище, сигнатуры функций не разрастаются, промежуточные уровни не знают о деталях.
Но именно в этом и проблема
context.Value превращается в чёрный ящик, ломает типобезопасность и делает важные зависимости невидимыми.Паттерн «A положил
payment в контекст, C его вытащил, а B просто прокинул ctx дальше» выглядит аккуратно, пока вы помните все неочевидные места чтения. Через неделю уже не видно, какие функции реально зависят от payment а это критические бизнес данные, спрятанные в контейнер без гарантий на уровне компилятора.Любая ошибка в ключе, типе или месте, где забыли вызвать
WithValue, всплывает только в рантайме, иногда в виде тихих багов, а не паники.Как обычно делают с
context.Value:type Payment struct {
ID string
Amount int
}
func A(ctx context.Context, transactionID string) {
payment := dbGetPayment(ctx, transactionID)
// Кладём бизнес данные в контекст
ctx = context.WithValue(ctx, "payment", payment)
B(ctx)
}
func B(ctx context.Context) {
// Эта функция формально не знает про payment,
// но обязана протащить ctx дальше
doSomething(ctx)
C(ctx)
}
func C(ctx context.Context) {
// Где то глубоко в стеке достаем payment из «чёрного ящика»
payment, ok := ctx.Value("payment").(Payment)
if !ok {
log.Println("payment not found in context")
return
}
processPayment(payment)
}context.Value стоит оставлять для узкого набора метаданных, а важные доменные данные лучше передавать явно через параметры.📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤9🥱4💯2
This media is not supported in your browser
VIEW IN TELEGRAM
Go to Definition для Go-проектов без IDE
В Go, с его неявными интерфейсами и структурой пакетов, навигация по коду критически важна. Во время ревью пулл-реквеста в обычном веб-интерфейсе сложно понять, какая структура реализует интерфейс, или найти все места использования функции в соседних пакетах.
SourceCraft индексирует Go-код и предоставляет привычные инструменты IDE: переход к декларации и поиск использований. Точность навигации достигает высоких показателей, что позволяет полноценно разбираться в логике конкурентного кода и зависимостях прямо в окне просмотра пулл-реквеста.
Проверьте работу навигации по ссылке → https://sourcecraft.dev/code-navigation-demo/uikit/pr/2040
В Go, с его неявными интерфейсами и структурой пакетов, навигация по коду критически важна. Во время ревью пулл-реквеста в обычном веб-интерфейсе сложно понять, какая структура реализует интерфейс, или найти все места использования функции в соседних пакетах.
SourceCraft индексирует Go-код и предоставляет привычные инструменты IDE: переход к декларации и поиск использований. Точность навигации достигает высоких показателей, что позволяет полноценно разбираться в логике конкурентного кода и зависимостях прямо в окне просмотра пулл-реквеста.
Проверьте работу навигации по ссылке → https://sourcecraft.dev/code-navigation-demo/uikit/pr/2040
👍4🥱2
TinyGo подвезли релиз 0.40.0 это финальное обновление 2025 года с упором на поддержку свежего LLVM, новое железо и зачистку багов.
Параллельно ускорили и облегчали встроенный сборщик мусора за счет урезания либы bdwgc и оптимизаций.
По железу появилась поддержка новых плат и микроконтроллеров в том числе ESP32 S3, Xiao ESP32S3, Gopher ARCADE и RP2350.
Внутри компилятора и рантайма прошлись по WASM и WASI добавили режим
buildmode=wasi-legacy для старых сценариев, улучшили обработку финализаторов и экспорта функций, а также подчистили ошибки в интерпретаторе, cgo и обработке сообщений линкера.📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤2👍2
Подготовили карточки с важными пунктами о том, как не дать себя тихо выжить из компании. Полный набор для защиты в материале.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
godump это минималистичный инструмент для отладки который красиво печатает структуры на Go в терминале или HTML и не требует зависимостей.
Инструмент решает типичную боль, когда приходится вручную форматировать структуры через
fmt.Printf, чтобы увидеть их содержимое. godump делает это автоматически, с подсветкой типов полей и защитой от циклических ссылок.Вывод можно оформить так, чтобы было видно место вызова, файл, строку, тип значения и структуру вложенности. Для повторяющихся указателей godump показывает ссылку вместо рекурсивного обхода.
Пример:
type User struct { Name string }
godump.Dump(User{Name: "Alice"})
// #main.User {
// +Name => "Alice" #string
// } 📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🤔1
Под капотом управляемой базы данных в MWS Cloud Platform
Разбираем внутренности managed баз в 10-м выпуске реалити-проекта Building the Cloud.
Покажем, как устроена архитектура управляемых баз данных, как работают агенты и реконсиляция, и что нужно сделать инженеру managed-решения, чтобы оно было безопасным.
📅 Эфир 25 декабря, 14:00 (мск)
🎁 Розыгрыш мерча MWS за лучший вопрос
👉 Регистрация
Разбираем внутренности managed баз в 10-м выпуске реалити-проекта Building the Cloud.
Покажем, как устроена архитектура управляемых баз данных, как работают агенты и реконсиляция, и что нужно сделать инженеру managed-решения, чтобы оно было безопасным.
📅 Эфир 25 декабря, 14:00 (мск)
🎁 Розыгрыш мерча MWS за лучший вопрос
👉 Регистрация
❤1