Библиотека Go-разработчика | Golang
23.3K subscribers
2.08K photos
42 videos
87 files
4.45K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
2👍2
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🧰 IntelliJ Developer Tools Plugin — аналог CyberChef, но для продуктов JetBrains. Это универсальный набор инструментов на все случаи жизни внутри IDE, которые могут пригодиться разработчику.

👉 GitHub
🔥13👍2🥱2
🧰 Создание системы логической репликации Postgres на Go

Разработчики Go базы данных Dolt работают над функцией репликации данных из Postgres и делятся опытом разработки протокола логической репликации на Go.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔5
🚀 FormStream — быстрый потоковый Go-парсер для multipart/form-data, который предоставляет враппер для использования с net/http, echo и gin.

parser, err := formstream.NewParser(r)
if err != nil {
return err
}

err = parser.Register("icon", func(r io.Reader, header formstream.Header) error {
name, _, _ := parser.Value("name")
password, _, _ := parser.Value("password")

return saveUser(r.Context(), name, password, r)
}, formstream.WithRequiredPart("name"), formstream.WithRequiredPart("password"))
if err != nil {
return err
}

err = parser.Parse()
if err != nil {
return err
}


👉 GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤔2
Forwarded from Библиотека программиста | программирование, кодинг, разработка
#инфографика

🧰 CI/CD пайплайн в деталях

1️⃣ SDLC с CI/CD

🔸Жизненный цикл разработки программного обеспечения (SDLC) состоит из нескольких ключевых этапов: разработка, тестирование, деплой и cопровождение. CI/CD автоматизирует и интегрирует эти этапы, обеспечивая более быстрые и надежные выпуски. Когда код помещается в Git-репозиторий, он запускает автоматизированный процесс сборки и тестирования.

🔸Для проверки кода запускаются сквозные тестовые примеры. Если тесты пройдены, код может быть автоматически развернут в staging/production окружении. Если проблемы обнаружены, код отправляется обратно в разработку для исправления ошибок. Эта автоматизация обеспечивает быструю обратную связь с разработчиками и снижает риск ошибок в продакшене.

2️⃣ Разница между CI и CD

🔸Непрерывная интеграция (CI) автоматизирует процессы сборки, тестирования и слияния. В рамках CI запускаются тесты всякий раз, когда код фиксируется для раннего обнаружения проблем интеграции. Это поощряет частые фиксации кода и быструю обратную связь.

🔸Непрерывная доставка (CD) автоматизирует процессы выпуска, такие как изменения инфраструктуры и развертывание. Это гарантирует, что программное обеспечение может быть надежно выпущено в любое время с помощью автоматизированных рабочих процессов. CD также может автоматизировать этапы ручного/аппрувал тестирования, необходимые перед деплоем в продакшене.

3️⃣ CI/CD пайплайн

🔸Типичный CI/CD пайплайн состоит из нескольких связанных этапов:

🗄 Разработчик фиксирует изменения кода в системе управления версиями
🗄 CI-сервер обнаруживает изменения и запускает сборку
🗄 Код компилируется и тестируется
🗄 Результаты тестирования сообщаются разработчику
🗄 В случае успеха артефакты развертываются в staging окружениях
🗄 Дальнейшее тестирование может быть проведено на стадии подготовки перед выпуском
🗄 Система CD внедряет утвержденные изменения в продакшен

👉 Источник
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥51
👩‍💻👩‍💻 Go + Kubernetes: кейс из практики

📌 Автор делится специфической проблемой, возникшей в одном из продакшн-окружений: при вызове определенного API-эндпоинта возникала ошибка 502 Bad Gateway только в одном продакшн-окружении. При этом контейнер в Kubernetes поде перезапускается, но без каких-либо ошибок в логах.

🔫 Оказывается, контейнер был убит из-за превышения лимита памяти (OOMKilled). Эндпоинт был разработан для получения большого объема данных для работы мобильного приложения в офлайн-режиме, но не ожидалось, что объем данных будет настолько большим.

🤦‍♂️ Проблема связана с работой сборщика мусора в Go, который расширяет кучу при необходимости, не зная о лимитах памяти, установленных для контейнера в Kubernetes. Это может привести к превышению лимита памяти и остановке контейнера.

☑️ Введение переменной окружения GOMEMLIMIT в Go 1.19 позволяет установить мягкий лимит памяти для сборщика мусора, что помогает управлять использованием памяти более эффективно и предотвратить OOM. В статье показано, как настроить GOMEMLIMIT в файле деплоя Kubernetes, чтобы он соответствовал установленному лимиту памяти.

☑️ Решение не является универсальным, и в некоторых кейсах может быть предпочтительнее быстро завершить работу с использованием настроек по умолчанию, чем пытаться использовать всю доступную память перед остановкой процесса из-за ошибки OOM.
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍15
💬 Что такое Low order bits (LOB) в контексте типа map в Go?

LOB в контексте типа map в Go относятся к младшим битам хэш-значения ключа, используемых для определения позиции элемента в массиве бакетов внутри мапы.

Когда мы вставляем или извлекаем элемент из мапы, используется хэш-функция для преобразования ключа в хэш-код. Этот хэш-код затем используется для определения, в каком бакете должен быть размещен или найден элемент.

Вместо использования всего хэш-кода напрямую, часто используются только его младшие биты, поскольку они обеспечивают равномерное распределение элементов по бакетам, что важно для эффективности хэш-таблицы.
👍31🥰3
⚡️ Расширение границ в Go: от net.Dial до системных вызовов, AF_PACKET и молниеносного AF_XDP

Под катом — сравнительный анализ производительности отправки пакетов в Linux. Если вам нравятся сети, Go и бенчмаркинг, то однозначно понравится этот мини-ресёрч.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍4
🔟 10 суровых истин, которые должен знать каждый джун

Вы думаете, что карьера в ИТ — это сплошные плюшки? Забудьте! Реальность жестока: низкие зарплаты на старте, бесконечные задачи и битва за релокацию. Откройте глаза на суровые реалии прямо сейчас!

👉 Читать статью
👉 Зеркало
🥱21👍9🎉5😁4
🚀 Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

Популярный челлендж в сообществе Java-разработчиков, который вирусился в январе, потихоньку дошел из гоферов. И вопрос уже не столько в реализации, сколько в оптимизации.

Автор описывает девять решений на Go, каждое из которых быстрее предыдущего. Первое, простое и идиоматичное, выполняется 1 минуту 45 секунд, а последнее — примерно 4 секунды.

👉 Читать
👍24🔥5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
This media is not supported in your browser
VIEW IN TELEGRAM
💬 Open Source по-русски: путь к технологической независимости или обочина прогресса?

Для одних организаций open source является ключом к преодолению зависимости от иностранных вендоров и драйвером инноваций, для других — дырой в безопасности и обочиной технологического прогресса.

Мы хотим изучить текущее состояние и возможности открытого ПО в России. Пройдите опрос и помогите нам увидеть ситуацию глазами IT-профессионалов.

👉 Ссылка на опрос 👈

Прохождение займёт примерно 4 минуты
👍11😁5
🏎 Улучшения трассировки выполнения в Go 1.22: низкие накладные расходы и масштабируемость

В одном из последних обновлений Go команда представила значительные улучшения в механизме трассировки выполнения, делая его более мощным и эффективным инструментом для разработчиков:

☑️ Низкие накладные расходы: благодаря оптимизации трассировок стека, временные затраты CPU на трассировки выполнения были сокращены до 1-2% для многих приложений, что делает трассировку более пригодной для постоянного использования.

☑️ Масштабируемость трассировок: переработка формата трассировок и их событий позволила снизить требования к памяти при анализе трассировок, решая проблему анализа больших объемов данных.

☑️ Flight recording: позволяет непрерывно вести трассировку и сохранять только самые последние данные трассировки, что идеально подходит для захвата событий, произошедших непосредственно перед важным инцидентом.

☑️ API для чтения трассировок: упрощает программный анализ трассировок, делая их более доступными для разработчиков.
15🔥4👍3
Разраб предложил создать HTTP-статус имени Олега Тинькова (признан иноагентом Министерством юстиции РФ) под названием 267 Doubtful But Okay, который означает, что запрос имеет сомнительную семантику, но он принят и обработан. Код статуса 267 выбран по году рождения Олега (1967 год).

💬 Как вам идея?

🤔 — сомнительно, но окэй
👍 — давно пора

#холивар
🤔338👍96🥱33😁18🌚4
👩‍💻 Как написать README для Go-проекта, который привлечет внимание разработчиков

Авторы Go-проекта Daytona поделились несколькими советами по созданию файла README, которые позволили добиться впечатляющих результатов: 4k звезд за первую неделю.

Вы узнаете, как создать впечатляющий заголовок, захватывающее содержание, соблюдать «гигиену» проекта и многое другое.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132
🤔 Могут ли адреса двух переменных быть одновременно равными и разными?

Код ниже определяет глобальную переменную a и локальную переменную b внутри main(). Затем он выводит адреса обеих переменных и, наконец, сравнивает их.

📌 Сравнение должно оцениваться как true, верно?

var a struct{}

func main() {
var b struct{}

fmt.Printf("&a: %p\n", &a)
fmt.Printf("&b: %p\n", &b)

fmt.Println("&a == &b:", &a == &b)
}


Пример выводит:

&a: 0x58e360
&b: 0x58e360
&a == &b: false


a и b — это пустые структуры, которые имеют нулевой размер, следовательно, они не должны занимать ячейки памяти. Они вообще не должны иметь адрес. Так что сравнивать их адреса с самого начала не имеет смысла.

Так что компилятор Go формально присваивает переменным нулевого размера адрес ради избежания введения специального случая переменных «без адреса». Компилятор может даже присвоить им один и тот же адрес, потому что для переменных нулевого размера не имеет значения, какой формальный адрес у них есть.

📌 Спецификация Go говорит:

Две различные переменные нулевого размера могут иметь одинаковый адрес в памяти


#tip
👍76🤔1132👾2
💪 Что не так с MVP: как создать конкурентоспособный продукт

Традиционная концепция MVP нуждается в пересмотре — авторы предлагают альтернативный подход, основанный на тесном взаимодействии с целевой аудиторией и непрерывных итерациях для создания действительно ценного продукта.

👉 Читать статью
👉 Зеркало
👍5👾2🤔1
🧰 Failsafe-go — Go-библиотека для создания отказоустойчивых приложений на Go. Она позволяет обернуть исполняемую логику одной или несколькими resilience политиками, которые могут быть комбинированы и составлены по мере необходимости.

📌 К таким политикам относятся: Retry, Circuit Breaker, Rate Limiter, Timeout, Fallback, Hedge и Bulkhead.

fallback := fallback.WithResult(backupConnection)
circuitBreaker := circuitbreaker.WithDefaults[any]()
timeout := timeout.With[any](10*time.Second)

// Get with fallback, retries, circuit breaker, and timeout
failsafe.Get(Connect, fallback, retryPolicy, circuitBreaker, timeout)


👉 GitHub
👉 Сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥4
🤔 Каким вы видите для себя идеальный собес?

Пример недушного собеса по мотивам статьи опытного интервьюера Олега Плотникова:

1️⃣ Вопрос про предыдущий опыт: в двух словах описать самый интересный (сложный) проект.

В чем суть проекта? Размер команды? Роль? Основной вклад? Срок проекта? И т. д.

2️⃣ Типовая задача, с которой реально придется сталкиваться, но решаемая за 5-15 минут + несколько вопрос в глубину про понимание инструмента (языка, фреймворка).

📌 Три основных аспекта, по которым оценивается кандидат:

🔸 Харды и наличие релевантного опыта.
🔸 Коммуникация (софт скиллы). Умение общаться, быстро и структурировано объяснить суть вопроса.
🔸 Проактивность в обучении и страсть к делу.

📌 За каждый навык дается до трех баллов. Есть хоть один ноль — сразу до свидания.

🔸 0 — все плохо
🔸 1 — с пивом покатит
🔸 2 — хорошо
🔸 3 — прекрасно

💬 Что думаете?

#холивар
👍15🥱91🌚1