Библиотека Go-разработчика | Golang
Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 #WXSSA
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Библиотека Go-разработчика | Golang
تُعد قناة Библиотека Go-разработчика | Golang (@goproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 24 066 مشتركاً، محتلاً المرتبة 5 372 في فئة التكنولوجيات والتطبيقات والمرتبة 27 097 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 24 066 مشتركاً.
بحسب آخر البيانات بتاريخ 15 سبتمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 28، وفي آخر 24 ساعة بمقدار -8، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 17.78%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 8.44% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 4 278 مشاهدة. وخلال اليوم الأول يجمع عادةً 2 031 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 16.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل навигация, лучшее_из_библиотеки_2025, git, string, golive.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Все самое полезное для Go-разработчика в одном канале.
Учиться у нас: clc.to/qaSdww
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0
#WXSSA”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 16 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
— маска повреждений зданий; — «дрожащий» рукописный текст; — ретро-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