Библиотека Go-разработчика | Golang
Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 #WXSSA
Ko'proq ko'rsatish📈 Telegram kanali Библиотека Go-разработчика | Golang analitikasi
Библиотека Go-разработчика | Golang (@goproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 24 063 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 372-o'rinni va Rossiya mintaqasida 27 097-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 24 063 obunachiga ega bo‘ldi.
15 Sentabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 28 ga, so‘nggi 24 soatda esa -8 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 17.78% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 8.44% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 4 278 marta ko‘riladi; birinchi sutkada odatda 2 031 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 16 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent навигация, лучшее_из_библиотеки_2025, git, string, golive kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Все самое полезное для Go-разработчика в одном канале.
Учиться у нас: clc.to/qaSdww
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0
#WXSSA”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 16 Sentabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
— маска повреждений зданий; — «дрожащий» рукописный текст; — ретро-CRT и глитчи; — зацикленная анимация текстур; — эффект строительства зданий.➡️ В статье — практические примеры из игр Roboden и Decipherism, а также разбор Fragment(), текстур, uniform-параметров и DrawRectShader(). 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoToProduction
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 стоит оставлять для узкого набора метаданных, а важные доменные данные лучше передавать явно через параметры.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
func ReadName() string {
var name string
fmt.Print("Enter your name: ")
fmt.Scan(&name)
return name
}
Для этой функции сложно написать unit-тест, потому что она читает из os.Stdin, а в тестах обычно хочется подставлять свои данные.
Решение: подменяем os.Stdin
В тестах можно временно переназначить os.Stdin на чтение из заранее подготовленного буфера:
func TestReadName(t *testing.T) {
input := "Alice\n"
r, w, _ := os.Pipe()
w.WriteString(input)
w.Close()
oldStdin := os.Stdin
defer func() { os.Stdin = oldStdin }()
os.Stdin = r
got := ReadName()
want := "Alice"
if got != want {
t.Errorf("got %q, want %q", got, want)
}
}
Функция, вызываемая в тесте, читает данные не из консоли пользователя, а из потока, в который записывают необходимые строки.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчикаЧто реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь. Задавайте всё, что давно хотелось спросить 📍 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
B-tree — когда используется и какие запросы ускоряет? EXPLAIN ANALYZE — что показывает и чем отличается от EXPLAIN? Почему PostgreSQL выбирает Seq Scan, хотя есть индекс? Составной индекс — что это и зачем нужен? Левый префикс — почему порядок колонок в индексе важен? Как выбрать порядок колонок в составном индексе? MVCC — как PostgreSQL позволяет транзакциям работать параллельно? Уровни изоляции — какие бывают и чем отличаются? Deadlock — как возникает и как его предотвращать? SELECT ... FOR UPDATE — когда нужен? N+1 — откуда появляется и как его найти? ACID — что означает каждая буква на практике? Connection pool — зачем он нужен и какие проблемы возникают при неправильных настройках? Replication lag — почему реплика отстаёт и чем это опасно? Partitioning vs Sharding — в чём разница и когда применять каждый подход?🔥 Если можете не просто дать определение, а привести пример из реального сервиса на Go, скорее всего, с базовыми вопросами PostgreSQL на собеседовании проблем не будет. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
исправили код → сдвинули offset назад → переиграли сообщенияНапример, для consumer group можно сбросить offset через kafka-consumer-groups. 💡 Важно: offset хранится для consumer group, поэтому сброс влияет на чтение этой группой. Kafka в этом плане отличается от классической очереди: прочитанное сообщение не исчезает сразу — его можно переиграть. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
toolchain go1.26.6
А CI может брать версию прямо из go.mod:
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction🔘 Unmarshal в структуру — примерно в 1,5 раза быстрее; 🔘 Unmarshal в any — примерно в 1,5 раза медленнее; 🔘 Marshal — немного медленнее, зато заметно меньше аллокаций; 🔘 потоковая работа через новый API MarshalWrite требует значительно меньше памяти.Самая интересная ловушка — any. Старый API разрешает дубликаты ключей JSON, поэтому новый движок не может использовать свой быстрый путь для any. В результате динамический JSON может обрабатываться медленнее. 🤩 А если перейти непосредственно на encoding/json/v2, появляются новые дефолты: дубликаты ключей и невалидный UTF-8 отклоняются, nil-слайсы и map по умолчанию кодируются иначе, а порядок ключей map не гарантируется без Deterministic. После перехода на Go 1.27 недостаточно проверить только компиляцию. Если encoding/json находится на горячем пути — стоит прогнать свои бенчмарки. Особенно если приложение активно работает с any или map[string]any. А encoding/json/v2 уже можно внедрять постепенно, сохраняя нужные v1-семантики через DefaultOptionsV1(). 🔗 Официальный гайд по миграции encoding/json/v2 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive
func Split(s, sep string) []string {
return strings.Split(s, sep)
}
func TestSplit(t *testing.T) {
tests := []struct {
name string
input string
sep string
want []string
}{
{name: "simple", input: "a/b/c", sep: "/", want: []string{"a", "b", "c"}},
{name: "no sep", input: "abc", sep: "/", want: []string{"abc"}},
{name: "trailing", input: "a/b/c/", sep: "/", want: []string{"a", "b", "c", ""}},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
got := Split(tc.input, tc.sep)
if !reflect.DeepEqual(got, tc.want) {
t.Fatalf("want %v got %v", tc.want, got)
}
})
}
}
Еще мелочь, но полезная. Внутри сабтеста t.Fatal завершает только текущий сабтест, а не весь набор, поэтому для table driven тестов это часто удобнее чем тянуть continue и пачку if.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
func newTestDB(t *testing.T) *sql.DB {
t.Helper()
db := openTempDB(t)
t.Cleanup(func() {
db.Close()
})
return db
}
🟡 Теперь тесту не нужно помнить про defer:
func TestUsers(t *testing.T) {
db := newTestDB(t)
// ...
}
Cleanup выполнится после завершения теста, даже если тот упал через t.Fatal. Несколько cleanup-функций выполняются в обратном порядке регистрации.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
templ Hello(name string) {
<div class="greeting">Привет, { name }</div>
}
После templ generate компонент можно использовать как обычную функцию:
view.Hello("гофер").Render(ctx, w)
📍 Плюс — типы и ошибки в компонентах проверяются при компиляции, есть автоматическое экранирование HTML.
Особенно удобно для серверного рендеринга и связки Go + htmx, когда полноценный frontend-фреймворк не нужен.
🔗 templ · GitHub
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction