Разработчики Go базы данных Dolt работают над функцией репликации данных из Postgres и делятся опытом разработки протокола логической репликации на Go.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔5
Получается ли у вас соблюдать дисциплину при работе из дома?
Anonymous Poll
9%
Режим — это вообще не про меня
24%
Да, каждый день рано встаю и успеваю сделать поставленные задачи
47%
Когда как — зависит от мотивации и нагрузки
11%
Нет, не получается
0%
Свой вариант (напишу в комментариях)
8%
Посмотреть результаты
🔥2
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 внедряет утвержденные изменения в продакшен
👉 Источник
🔸Жизненный цикл разработки программного обеспечения (SDLC) состоит из нескольких ключевых этапов: разработка, тестирование, деплой и cопровождение. CI/CD автоматизирует и интегрирует эти этапы, обеспечивая более быстрые и надежные выпуски. Когда код помещается в Git-репозиторий, он запускает автоматизированный процесс сборки и тестирования.
🔸Для проверки кода запускаются сквозные тестовые примеры. Если тесты пройдены, код может быть автоматически развернут в staging/production окружении. Если проблемы обнаружены, код отправляется обратно в разработку для исправления ошибок. Эта автоматизация обеспечивает быструю обратную связь с разработчиками и снижает риск ошибок в продакшене.
🔸Непрерывная интеграция (CI) автоматизирует процессы сборки, тестирования и слияния. В рамках CI запускаются тесты всякий раз, когда код фиксируется для раннего обнаружения проблем интеграции. Это поощряет частые фиксации кода и быструю обратную связь.
🔸Непрерывная доставка (CD) автоматизирует процессы выпуска, такие как изменения инфраструктуры и развертывание. Это гарантирует, что программное обеспечение может быть надежно выпущено в любое время с помощью автоматизированных рабочих процессов. CD также может автоматизировать этапы ручного/аппрувал тестирования, необходимые перед деплоем в продакшене.
🔸Типичный CI/CD пайплайн состоит из нескольких связанных этапов:
👉 Источник
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥5❤1
📌 Автор делится специфической проблемой, возникшей в одном из продакшн-окружений: при вызове определенного 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
Forwarded from Библиотека Go для собеса | вопросы с собеседований
💬 Что такое Low order bits (LOB) в контексте типа map в Go?
LOB в контексте типа
Когда мы вставляем или извлекаем элемент из мапы, используется хэш-функция для преобразования ключа в хэш-код. Этот хэш-код затем используется для определения, в каком бакете должен быть размещен или найден элемент.
Вместо использования всего хэш-кода напрямую, часто используются только его младшие биты, поскольку они обеспечивают равномерное распределение элементов по бакетам, что важно для эффективности хэш-таблицы.
LOB в контексте типа
map
в Go относятся к младшим битам хэш-значения ключа, используемых для определения позиции элемента в массиве бакетов внутри мапы.Когда мы вставляем или извлекаем элемент из мапы, используется хэш-функция для преобразования ключа в хэш-код. Этот хэш-код затем используется для определения, в каком бакете должен быть размещен или найден элемент.
Вместо использования всего хэш-кода напрямую, часто используются только его младшие биты, поскольку они обеспечивают равномерное распределение элементов по бакетам, что важно для эффективности хэш-таблицы.
👍31🥰3
⚡️ Расширение границ в Go: от net.Dial до системных вызовов, AF_PACKET и молниеносного AF_XDP
Под катом — сравнительный анализ производительности отправки пакетов в Linux. Если вам нравятся сети, Go и бенчмаркинг, то однозначно понравится этот мини-ресёрч.
👉 Читать
Под катом — сравнительный анализ производительности отправки пакетов в Linux. Если вам нравятся сети, Go и бенчмаркинг, то однозначно понравится этот мини-ресёрч.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍4
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
🔟 10 суровых истин, которые должен знать каждый джун
Вы думаете, что карьера в ИТ — это сплошные плюшки? Забудьте! Реальность жестока: низкие зарплаты на старте, бесконечные задачи и битва за релокацию. Откройте глаза на суровые реалии прямо сейчас!
👉 Читать статью
👉 Зеркало
Вы думаете, что карьера в ИТ — это сплошные плюшки? Забудьте! Реальность жестока: низкие зарплаты на старте, бесконечные задачи и битва за релокацию. Откройте глаза на суровые реалии прямо сейчас!
👉 Читать статью
👉 Зеркало
🥱21👍9🎉5😁4
🚀 Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд
Популярный челлендж в сообществе Java-разработчиков, который вирусился в январе, потихоньку дошел из гоферов. И вопрос уже не столько в реализации, сколько в оптимизации.
Автор описывает девять решений на 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 минуты
Для одних организаций open source является ключом к преодолению зависимости от иностранных вендоров и драйвером инноваций, для других — дырой в безопасности и обочиной технологического прогресса.
Мы хотим изучить текущее состояние и возможности открытого ПО в России. Пройдите опрос и помогите нам увидеть ситуацию глазами IT-профессионалов.
👉 Ссылка на опрос 👈
Прохождение займёт примерно 4 минуты
👍11😁5
🏎 Улучшения трассировки выполнения в Go 1.22: низкие накладные расходы и масштабируемость
В одном из последних обновлений Go команда представила значительные улучшения в механизме трассировки выполнения, делая его более мощным и эффективным инструментом для разработчиков:
☑️ Низкие накладные расходы: благодаря оптимизации трассировок стека, временные затраты CPU на трассировки выполнения были сокращены до 1-2% для многих приложений, что делает трассировку более пригодной для постоянного использования.
☑️ Масштабируемость трассировок: переработка формата трассировок и их событий позволила снизить требования к памяти при анализе трассировок, решая проблему анализа больших объемов данных.
☑️ Flight recording: позволяет непрерывно вести трассировку и сохранять только самые последние данные трассировки, что идеально подходит для захвата событий, произошедших непосредственно перед важным инцидентом.
☑️ API для чтения трассировок: упрощает программный анализ трассировок, делая их более доступными для разработчиков.
В одном из последних обновлений Go команда представила значительные улучшения в механизме трассировки выполнения, делая его более мощным и эффективным инструментом для разработчиков:
☑️ Низкие накладные расходы: благодаря оптимизации трассировок стека, временные затраты CPU на трассировки выполнения были сокращены до 1-2% для многих приложений, что делает трассировку более пригодной для постоянного использования.
☑️ Масштабируемость трассировок: переработка формата трассировок и их событий позволила снизить требования к памяти при анализе трассировок, решая проблему анализа больших объемов данных.
☑️ Flight recording: позволяет непрерывно вести трассировку и сохранять только самые последние данные трассировки, что идеально подходит для захвата событий, произошедших непосредственно перед важным инцидентом.
☑️ API для чтения трассировок: упрощает программный анализ трассировок, делая их более доступными для разработчиков.
❤15🔥4👍3
Разраб предложил создать HTTP-статус имени Олега Тинькова (признан иноагентом Министерством юстиции РФ) под названием 267 Doubtful But Okay, который означает, что запрос имеет сомнительную семантику, но он принят и обработан. Код статуса 267 выбран по году рождения Олега (1967 год).
💬 Как вам идея?
🤔 — сомнительно, но окэй
👍 — давно пора
#холивар
💬 Как вам идея?
🤔 — сомнительно, но окэй
👍 — давно пора
#холивар
🤔338👍96🥱33😁18🌚4
Авторы Go-проекта Daytona поделились несколькими советами по созданию файла README, которые позволили добиться впечатляющих результатов: 4k звезд за первую неделю.
Вы узнаете, как создать впечатляющий заголовок, захватывающее содержание, соблюдать «гигиену» проекта и многое другое.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
🤔 Могут ли адреса двух переменных быть одновременно равными и разными?
Код ниже определяет глобальную переменную
📌 Сравнение должно оцениваться как
Пример выводит:
Так что компилятор Go формально присваивает переменным нулевого размера адрес ради избежания введения специального случая переменных «без адреса». Компилятор может даже присвоить им один и тот же адрес, потому что для переменных нулевого размера не имеет значения, какой формальный адрес у них есть.
📌 Спецификация Go говорит:
#tip
Код ниже определяет глобальную переменную
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🤔11❤3⚡2👾2
Forwarded from Библиотека шарписта | C#, F#, .NET, ASP.NET
💪 Что не так с MVP: как создать конкурентоспособный продукт
Традиционная концепция MVP нуждается в пересмотре — авторы предлагают альтернативный подход, основанный на тесном взаимодействии с целевой аудиторией и непрерывных итерациях для создания действительно ценного продукта.
👉 Читать статью
👉 Зеркало
Традиционная концепция MVP нуждается в пересмотре — авторы предлагают альтернативный подход, основанный на тесном взаимодействии с целевой аудиторией и непрерывных итерациях для создания действительно ценного продукта.
👉 Читать статью
👉 Зеркало
👍5👾2🤔1
📌 К таким политикам относятся: 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
Failsafe-go
Retry
Failsafe-go website
👍28🔥4
🤔 Каким вы видите для себя идеальный собес?
Пример недушного собеса по мотивам статьи опытного интервьюера Олега Плотникова:
1️⃣ Вопрос про предыдущий опыт: в двух словах описать самый интересный (сложный) проект.
❓ В чем суть проекта? Размер команды? Роль? Основной вклад? Срок проекта? И т. д.
2️⃣ Типовая задача, с которой реально придется сталкиваться, но решаемая за 5-15 минут + несколько вопрос в глубину про понимание инструмента (языка, фреймворка).
📌 Три основных аспекта, по которым оценивается кандидат:
🔸 Харды и наличие релевантного опыта.
🔸 Коммуникация (софт скиллы). Умение общаться, быстро и структурировано объяснить суть вопроса.
🔸 Проактивность в обучении и страсть к делу.
📌 За каждый навык дается до трех баллов. Есть хоть один ноль — сразу до свидания.
🔸 0 — все плохо
🔸 1 — с пивом покатит
🔸 2 — хорошо
🔸 3 — прекрасно
💬 Что думаете?
#холивар
Пример недушного собеса по мотивам статьи опытного интервьюера Олега Плотникова:
1️⃣ Вопрос про предыдущий опыт: в двух словах описать самый интересный (сложный) проект.
❓ В чем суть проекта? Размер команды? Роль? Основной вклад? Срок проекта? И т. д.
2️⃣ Типовая задача, с которой реально придется сталкиваться, но решаемая за 5-15 минут + несколько вопрос в глубину про понимание инструмента (языка, фреймворка).
📌 Три основных аспекта, по которым оценивается кандидат:
🔸 Харды и наличие релевантного опыта.
🔸 Коммуникация (софт скиллы). Умение общаться, быстро и структурировано объяснить суть вопроса.
🔸 Проактивность в обучении и страсть к делу.
📌 За каждый навык дается до трех баллов. Есть хоть один ноль — сразу до свидания.
🔸 0 — все плохо
🔸 1 — с пивом покатит
🔸 2 — хорошо
🔸 3 — прекрасно
💬 Что думаете?
#холивар
👍15🥱9❤1🌚1
Автор Domain-Driven Design with Golang Matt Boyle объединил все источники, которые он считает полезными и стоящими, в одну статью.
Читайте подробнее, чтобы узнать о крутых книгах/блогах, видеокурсах/докладах на конференциях, подкастах и, самое главное, проектах для закрепления изученного.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Bytesizego
Learning Go in 2024; From Beginner to Senior
We all learn differently and at different paces. Finding content that is right for us is challenging. Below is my attempt to curate all the great content I have come across over the years into one place to hopefully help folks advance their Golang journey…
👍21🔥3🤔3❤1🥱1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
📈 По просьбе подписчиков «Библиотеки программиста» мы провели опрос и выяснили, что у большинства айтишников зарплата в 2023 году выросла.
⚡️ Как выглядит доход среднего айтишника и какие факторы окажут влияние на динамику ИТ-зарплат в 2024 году — расскажем в статье на VC.
👉 Читать
P. S. Свои предложения для исследований пишите в комменты👇
⚡️ Как выглядит доход среднего айтишника и какие факторы окажут влияние на динамику ИТ-зарплат в 2024 году — расскажем в статье на VC.
👉 Читать
P. S. Свои предложения для исследований пишите в комменты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🎉3
Ведущий разраб юнита Platform as a Service в Авито Павел Агалецкий рассказывает, как поднять маленький кластер Kubernetes на локальной машине с помощью общедоступных инструментов и задеплоить Hello World! на Go.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍3🔥1