Б
Библиотека Go-разработчика | Golang
30.08.2026 12:03 · 👁 1.5K
📎 Библиотека анимаций для терминала
Для тех, кто занимается разработкой текстовых интерфейсов на Go, есть интересный инструмент — библиотека sysc-Go.
В библиотеке доступны разные категории эффектов: от классического цифрового дождя в стиле «Матрицы» и пламени Doom до красочных фейерверков и подводных анимаций с рыбой.
Есть и текстовые эффекты, которые оживляют ASCII-арт — например, огненный текст, эффекты типографики с имитацией печатной машинки или вращающиеся кольцевые анимации.
Чистая реализация на Go без зависимостей, удобный CLI-интерфейс с выбором и просмотром всех доступных эффектов, а также встроенный ASCII-редактор с живым предпросмотром.
➡️ Анимировать терминал
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Б
Библиотека Go-разработчика | Golang
29.08.2026 10:17 · 👁 2.2K
✨ Charm: красивые TUI-приложения на Go
Если fmt.Println уже кажется слишком скучным, посмотрите на экосистему Charm 🤩
🤩 Bubble Tea — фреймворк для интерактивных TUI на Go
🤩 Lip Gloss — стили, цвета, рамки и layout
🤩 Bubbles — готовые компоненты: списки, спиннеры, input и другие
🤩 Gum — интерактивные элементы для shell-скриптов без Go
Например, меню выбора в bash:
gum choose "deploy" "rollback" "cancel"
А если хочется написать полноценный терминальный интерфейс — можно собрать его на Bubble Tea.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Б
Библиотека Go-разработчика | Golang
28.08.2026 11:00 · 👁 2.5K
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoGiggle
Б
Библиотека Go-разработчика | Golang
27.08.2026 11:00 · 👁 3K
🤩 Go tip: вшивайте файлы прямо в бинарник через go:embed
Нужны шаблоны, миграции или небольшая статика, но не хочется таскать их рядом с бинарником?
import "embed"
//go:embed templates/*.html
var templatesFS embed.FS
Дальше embed.FS можно использовать с html/template, text/template или net/http.
templates.ParseFS(templatesFS, "templates/*.html»)
Можно вшить и отдельный файл:
//go:embed version.txt
var version string
📌 Файлы попадают в программу при сборке. Изменили ресурс — пересобирайте бинарник.
Для шаблонов, миграций и небольшой статики — отличный вариант. Для огромных ассетов — уже стоит подумать о другом подходе.
🔗 Документация
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Б
Библиотека Go-разработчика | Golang
26.08.2026 11:04 · 👁 3.1K
✏️ Расстояния между единицами: находим нужный паттерн
Дан массив нулей и единиц, нужно проверить, что между любыми двумя единицами находится минимум k нулей. Звучит элементарно, но в реализации легко споткнуться.
Массив [1,0,0,0,1,0,0,1] при k=2 валиден: между первой и второй единицей три нуля (достаточно), между второй и третьей — два нуля (достаточно). А вот [1,0,1,0,0,1] при k=2 — нет, потому что первые две единицы разделены только одним нулём.
Запоминаем позицию последней найденной единицы. Когда встречаем новую, проверяем расстояние до неё и сразу обновляем позицию.
Это будет один проход по массиву:
func kLengthApart(nums []int, k int) bool {
lastPos := -k - 1
for i := 0; i < len(nums); i++ {
if nums[i] == 1 {
if i - lastPos - 1 < k {
return false
}
lastPos = i
}
}
return true
}
Результат: O(n) время, O(1) память.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#ReadySetGo
Б
Библиотека Go-разработчика | Golang
25.08.2026 11:04 · 👁 3.1K
🛠️ sqlc: пишешь SQL → получаешь типобезопасный Go
Вместо ORM и ручного Scan можно оставить SQL как есть, а Go-код сгенерировать:
-- name: GetAuthor :one
SELECT id, name, bio
FROM authors
WHERE id = $1;
sqlc generate
После генерации:
author, err := queries.GetAuthor(ctx, id)
sqlc проверяет запросы относительно схемы и генерирует типизированные структуры и методы.
Поддерживаются PostgreSQL, MySQL и SQLite.
⚡️ Документация
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Б
Библиотека Go-разработчика | Golang
24.08.2026 11:05 · 👁 3.2K
🛡 Go tip: не открывайте локальный сервис наружу случайно
Если HTTP-сервис должен быть доступен только на вашей машине, слушайте 127.0.0.1, а не 0.0.0.0:
srv := &http.Server{
Addr: "127.0.0.1:8001",
}
127.0.0.1 — только локальный интерфейс.
А:
Addr: "0.0.0.0:8001»
означает прослушивание всех IPv4-интерфейсов.
📌 Для локальных админок, debug-сервисов и dev-инструментов это простая настройка, которую легко забыть — и случайно выставить сервис в сеть.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Б
Библиотека Go-разработчика | Golang
23.08.2026 11:02 · 👁 3.4K
💡 Как append растит слайс
Все знают, что append добавляет элемент в слайс. А вот что происходит, когда место в массиве кончилось, знают не всегда, и как раз тут прячется пара неожиданностей.
🔵 Пока есть запас
У слайса есть len и cap. Пока len меньше cap, append дописывает элемент прямо в тот же массив и возвращает слайс, который смотрит туда же. Никакого копирования, дёшево. Именно поэтому два слайса, делящие один массив, могут внезапно перетирать данные друг друга при append в один из них.
🔵 Когда запас кончился
Как только cap исчерпан, рантайм выделяет новый массив побольше, копирует туда старые элементы и возвращает слайс уже на новую память. С этого момента старый и новый слайс не связаны, и запись в один не видна в другом. Отсюда правило, которое многих спасало от багов. Всегда присваивайте результат обратно.
s = append(s, x)
🔵 На сколько растёт
Точный коэффициент это деталь реализации, которая менялась от версии к версии, поэтому закладываться на конкретное число не стоит. Грубый ориентир такой. Маленькие слайсы растут примерно вдвое, большие прибавляют около четверти за раз, а переход между режимами сглажен в районе нескольких сотен элементов. Смысл в том, чтобы амортизировать стоимость и не копировать массив на каждом добавлении.
Если вы заранее знаете примерный размер, выделяйте вместимость сразу.
s := make([]int, 0, n)
for i := 0; i < n; i++ {
s = append(s, f(i))
}
Так вы избегаете череды перевыделений и копирований, а заодно снимаете нагрузку со сборщика мусора. На горячих циклах это заметно.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
Б
Библиотека Go-разработчика | Golang
22.08.2026 12:53 · 👁 3.2K
⚙️ Go tip: errgroup вместо ручного управления группой горутин
Нужно параллельно выполнить несколько задач, остановиться при ошибке и ограничить количество одновременно работающих операций?
Вместо WaitGroup + канала ошибок можно использовать golang.org/x/sync/errgroup:
g, ctx := errgroup.WithContext(ctx)
g.SetLimit(8)
for _, url := range urls {
g.Go(func() error {
return fetch(ctx, url)
})
}
if err := g.Wait(); err != nil {
return err
}
WithContext отменяет контекст при первой ошибке, SetLimit(8) держит максимум 8 активных горутин, а Wait() возвращает ошибку.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Б
Библиотека Go-разработчика | Golang
21.08.2026 11:01 · 👁 3.5K
🔎 Go tip: откуда в проекте взялась эта зависимость?
Нашли незнакомый модуль в go.mod и не понимаете, кто его подтянул?
Поможет:
go mod why -m golang.org/x/text
Go покажет цепочку зависимостей, из-за которой модуль оказался нужен проекту.
Например:
your-project
↓
github.com/example/api
↓
golang.org/x/text
📌 Полезно перед чисткой go.mod, обновлением зависимостей или разбором supply chain.
А если нужно посмотреть, какие модули вообще используются, пригодится:
go mod graph
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction