Библиотека Go для собеса | вопросы с собеседований
Открыть в Telegram
Вопросы с собеседований по Go и ответы на них. Учиться у нас: clc.to/iEeaZw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197
Больше7 428
Подписчики
-524 часа
-77 дней
+630 день
Архив постов
Repost from Библиотека Go-разработчика | Golang
👩💻 errors.Is(), errors.As(), errors.Unwrap(), кастомные ошибки и многое другое: подробное руководство для Go-разработчика
👉 Читать
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣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 — код, квизы и тесты
Вакансии для 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 запрещена на территории РФ
💬 Почему следует избегать использования context.Background() напрямую? Какие есть альтернативы?
Использование
context.Background() напрямую не рекомендуется, потому что он не предоставляет способа остановить или отменить операции, если что-то пойдет не так. Этот контекст самый простой, без значений, сроков и сигналов отмены. Это может стать проблемой, когда задачи застревают или требуют плавного завершения.
Чтобы справиться с этим, лучше использовать context.WithTimeout, context.WithCancel или context.WithDeadline. Эти контексты позволяют задавать время ожидания или возможность отмены, что делает горутины более управляемыми и надежными.
📌 Вот примеры использования:
🔸 context.WithTimeout(ctx, duration): задает время ожидания для выполнения задачи.
🔸 context.WithCancel(ctx): позволяет отменить задачу вручную.
🔸 context.WithDeadline(ctx, deadline): устанавливает конкретное время завершения задачи.
Можно также использовать функции с суффиксом Cause (например, context.WithTimeoutCause), которые дают более детальные сообщения об ошибках (например, "context deadline exceeded: custom message").
В случае работы с каналами, чтобы не ждать ответа бесконечно, можно использовать конструкцию select с тайм-аутом:
select {
case result := <-ch:
fmt.Println("Received result:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
}
Однако, time.After может привести к краткосрочным утечкам памяти. В таких случаях лучше использовать time.Timer или time.Ticker для лучшего контроля над временем.Можно также использовать функции с суффиксом
Cause (например, `context.WithTimeoutCause`), которые дают более детальные сообщения об ошибках (например, "context deadline exceeded: custom message").
В случае работы с каналами, чтобы не ждать ответа бесконечно, можно использовать конструкцию select с тайм-аутом:
select {
case result := <-ch:
fmt.Println("Received result:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
}
Однако, time.After может привести к краткосрочным утечкам памяти. В таких случаях лучше использовать time.Timer или time.Ticker для лучшего контроля над временем.JSON: JavaScript Object Notation (JSON) - читаемый и широко используемый формат обмена данными. Go включает пакеты encoding/json и encoding/json для кодирования и декодирования JSON.
XML: Extensible Markup Language (XML) - формат для структурированных данных. Go имеет пакеты для работы с XML, такие как encoding/xml.
Protocol Buffers (protobuf): Protocol Buffers - это бинарный формат сериализации данных, обеспечивающий высокую производительность и компактность. Go поддерживает protobuf через библиотеку github.com/golang/protobuf/proto.
MessagePack: MessagePack - это бинарный формат обмена данными, также предлагающий компактность и производительность. Go имеет библиотеки для работы с MessagePack, такие как github.com/vmihailenco/msgpack и github.com/tinylib/msgp.
Toml: TOML (Tom’s Obvious, Minimal Language) - формат конфигурационных файлов, который можно использовать для обмена данными. Go имеет библиотеки для работы с TOML, например, github.com/BurntSushi/toml.
CSV: Значения, разделенные запятыми (CSV) - это формат данных, часто используемый для обмена табличными данными. Go включает стандартные пакеты для чтения и записи CSV-файлов.
YAML: YAML (YAML Ain’t Markup Language) - формат для структурированных данных, часто используемый для конфигурационных файлов. Go поддерживает YAML через пакеты, такие как gopkg.in/yaml.v2.
Это лишь несколько примеров протоколов и форматов данных, которые можно использовать в Go для сетевого обмена информацией. Выбор конкретных протоколов и форматов зависит от требований вашего приложения и случаев использования.
conf
wg0-client-anastasia.conf
0.3 KB
💬 Почему следует избегать использования context.Background() напрямую?
Использование context.Background() напрямую не рекомендуется, потому что он не предоставляет способа остановить или отменить операции, если что-то пойдет не так. Этот контекст самый простой, без значений, сроков и сигналов отмены. Это может стать проблемой, когда задачи застревают или требуют плавного завершения.
Чтобы справиться с этим, лучше использовать context.WithTimeout, context.WithCancel или context.WithDeadline. Эти контексты позволяют задавать время ожидания или возможность отмены, что делает горутины более управляемыми и надежными.
📌 Вот примеры использования:
🔸
context.WithTimeout(ctx, duration): задает время ожидания для выполнения задачи.
🔸 context.WithCancel(ctx): позволяет отменить задачу вручную.
🔸 context.WithDeadline(ctx, deadline): устанавливает конкретное время завершения задачи.
Можно также использовать функции с суффиксом Cause (например, `context.WithTimeoutCause`), которые дают более детальные сообщения об ошибках (например, "context deadline exceeded: custom message").
В случае работы с каналами, чтобы не ждать ответа бесконечно, можно использовать конструкцию select с тайм-аутом:
select {
case result := <-ch:
fmt.Println("Received result:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timed out")
}
Однако, time.After может привести к краткосрочным утечкам памяти. В таких случаях лучше использовать time.Timer или time.Ticker для лучшего контроля над временем.
💬 Почему следует избегать использования context.Background() напрямую?
Использование context.Background() напрямую не рекомендуется, потому что он не предоставляет способа остановить или отменить операции, если что-то пойдет не так. Этот контекст самый простой, без значений, сроков и сигналов отмены. Это может стать проблемой, когда задачи застревают или требуют плавного завершения.
Чтобы справиться с этим, лучше использовать context.WithTimeout, context.WithCancel или context.WithDeadline. Эти контексты позволяют задавать время ожидания или возможность отмены, что делает горутины более управляемыми и надежными.
📌 Вот примеры использования:
🔸 context.WithTimeout(ctx, duration): задает время ожидания для выполнения задачи.
🔸 context.WithCancel(ctx): позволяет отменить задачу вручную.
🔸 context.WithDeadline(ctx, deadline): устанавливает конкретное время завершения задачи.#tips
🎙«Как мы перешли на Microsoft.Extensions.Configuration и стало хорошо» — доклад Андрея Рягузова про то, как компания перешла от самописного метода работы с настройками к стандартному варианту, предлагаемому Microsoft.
Вы узнаете, почему они использовали нестандартный метод изначально, какие выгоды и новые возможности открываются при использовании «коробочных» инструментов и как можно интегрировать их в свои проекты.
▶️ Смотреть
YouTube
Андрей Рягузов «Как мы перешли на Microsoft.Extensions.Configuration и стало хорошо»
Андрей расскажет о том, как компания перешла от самописного метода работы с настройками к стандартному варианту, предлагаемому Microsoft. Почему они использо...
Поросёнок Пётр
Рад представить наш новый выпуск с новым гостем из мира Security. Со времен когда bug bounty было не таким "модным", наш гость умудрился запустить сайтик и в режиме реального времени насобирать на Porsche 911. Сейчас этим сложно удивить, но 10 лет назад это казалось невероятным. Это не единственное о чем мы поговорили с Кириллом. Приятного просмотра 😉
https://youtu.be/QMXBCpomYyM
YouTube
Кир (isox) Ермаков - Porsche на BugBounty, CEO Vulners, роль CIO для High-risk Businesses (Ep.3)
Гость нашего подкаста занимается компьютерной безопасностью уже более 15 лет. Свой путь в индустрии он начал с системного администратора, немного поохотился ...
Какие протоколы и форматы данных поддерживаются для сетевой коммуникации в Go?
Go поддерживает множество протоколов и форматов данных для сетевой коммуникации. Вот список наиболее часто используемых протоколов и форматов данных, которые можно использовать в сетевых приложениях на Go:
Протоколы:
HTTP/HTTPS: Протокол передачи гипертекста (HTTP) и его защищённая версия HTTPS широко используются для обмена данными между клиентами и серверами в Интернете. Go включает стандартный пакет net/http для создания HTTP-серверов и клиентов.
TCP: Протокол управления передачей (TCP) обеспечивает надежное и установленное соединение для обмена данными. В Go есть встроенная поддержка TCP в стандартной библиотеке.
UDP: Протокол пользовательских дейтаграмм (UDP) предлагает более легкое и ненадежное соединение для обмена данными. Go также поддерживает UDP.
WebSocket: WebSocket - это протокол, который обеспечивает двунаправленную коммуникацию через одно TCP-соединение, поддерживая более интерактивную связь. В Go есть пакеты для работы с WebSocket.
gRPC: gRPC - это высокопроизводительный фреймворк для удаленного вызова процедур (RPC), использующий HTTP/2 для передачи данных. Часто используется для построения микросервисов. Go предоставляет библиотеку gRPC.
Форматы данных:
📎 Описание конкурса:
Вы пишете обезличенный отчет, в котором рассказываете о своей самой интересной баге, отправляете отчет в бота. Позже команда жюри оценит его, а уже 17 мая мы свяжемся с участниками и отдадим их заслуженные призы).
🏅 Призы:
Жюри выберет топ 6 участников для полноценной или частичной компенсации билетов на PositiveHackDays и обратно!
🔖 Как мне участвовать?
1. Являться школьником/студентом бакалавриата или специалитета
2. Отправить файл формата .docx или .pdf с описанием бага в нашего бота (В описании к файлу должно содежаться слово Заявка)
⏰ Время проведения:
6го мая в 15:00 - Старт приема заявок
13 мая 15:00 - Закрытие приема заявок
17 мая 17:00 Оглашение результатов
📝 Критерии оценивания:
1. Подробность описания (3 балла)
2. Сложность эксплуатации (2 балла)
3. Нестандартный подход и креативность (3 балла)
4. Вау-эффект (субъективный параметр на усмотрение членов жюри) (2 балла)
👀 Состав жюри:
@SidneyJob (Пентестер, автор канала Заметочки SidneyJob)
@curiv (Пентестер, активист ИБ сообщества, основатель @dc7342, @permctf, автор канала @pathsecure)
@cyrus_0x00 (Пентестер в компании DeteAct ✨)
@brotherok (Багхантер, автора канала ШКИБыть)
@bughunter_circuit (Автор канала о багхантинге)
@romanpnn (Автор канала Пакет Безопасности)
@wr3dmast3r (Пентестер, автор канала wr3dmast3r vs pentest)
<конечный список жюри уточняется>
💰Бюджет:
Бюджет на оплату дороги для всех участников - 120 тысяч. Мы тратим весь планируемый бюджет, в том числе, в счет компенсации оплаты дороги другим победителям.
📃 Что будет с отчетами?
Планируется опубликовать отчеты победителей (при согласии автора)
👉 Важная деталь: Жюри и бюджет формируется независимыми инициативными участниками русскоязычного ИБ сообщества. Конкурс следует воспринимать как благотворительность в отношении перспективных молодых талантов. Мы убеждены, что за такими специалистами находится будущее ИБ сообщества.
💬 По всем вопросам писать сюда: @SidneyJob, @CuriV
Telegram
Positive Technologies
Официальный канал Positive Technologies.
Уже более 20 лет наша основная задача — предотвращать хакерские атаки до того, как они причинят неприемлемый ущерб бизнесу и цел...
VIEW CHANNEL
🚀 Поехали! Последняя пятница недели, друзья!
🏢 ЯИБАШНИ 🏢
- наконец-таки твой блестящий
код попадет куда-то ещё,
помимо калькулятора, на
котором ты его печатал. Теперь
не только твоя соседка, узнает
какой ты дурачок. Скрести
пальцы!
Яндекс музыка пытается рассчитать мои рекомендации исходя из того что в течении дня я могу послушать Ирину Аллерову, АС/DC и фонк ремиксы песен из «Смешариков»
Bounty On Coffee
Исчерпывающий материал по Client-Side.
https://aszx87410.github.io/beyond-xss/en/
aszx87410.github.io
About This Series | Beyond XSS
As a software engineer, you must be familiar with information security. In your work projects, you may have gone through security audits, including static code scanning, ...
https://youtu.be/mXW7JHJM34k
https://youtu.be/mXW7JHJM34k?si=xRFFxqYtWgDjQerO
YouTube
Intuitive SQL For Data Analytics - Tutorial
Learn SQL for analytics. Learn both the theory and the practice so you can confidently solve hard SQL challenges on your own. No previous experience required...
🧰 GoWrap — CLI-инструмент, который генерирует декораторы для интерфейса Go с использованием простых шаблонов. Внутри множество шаблонов для простого добавления метрик, трассировки, пулов и многих других фич в существующий код.
👩💻 GitHub
GitHub
GitHub - hexdigest/gowrap: GoWrap is a command line tool for generating decorators for Go interfaces
GoWrap is a command line tool for generating decorators for Go interfaces - hexdigest/gowrap
«REST API клиенты для C#» https://youtu.be/UNqQ5BGN7Og?si=2ViTu3gfrACrrs08
YouTube
Артём Квашнин «REST API клиенты для C#»
В докладе мы рассмотрим типичные ошибки при работе со стандартным HttpClient, посмотрим на реализацию межсервисного взаимодействия от Microsoft и самое главн...
Потерялись в скобках? #vim может выделить другую сторону вашей текущей скобки с помощью :set showmatch.
Structure of URL
#web
🤔 Как вам рубрика «советы по работе #vim»? Нет, только не говорите, что не любите этот редактор 🥷
👩💻.Используйте команду :%norm для использования режима normal в каждой строке файла👇
☑️ Например, предположим, что у нас есть список слов. Мы хотим, чтобы эти слова стали ключами в JSON-файле с пустыми значениями.
:%norm csw"A: "",
🔗 Подробнее
Vimtricks
Operate on every line - VimTricks
Use Vim's :norm command to operate on every line in a file.
Размер макетов: подробное руководство по CSS fr Unit
Основные преимущества использования fr:
➡️ единицы fr отзывчивы по своей природе. По мере изменения размера контейнера изменяются и дроби, сохраняя пропорции макета.
➡️ Они полезны для создания гибкого дизайна на основе grid без необходимости указания фиксированной ширины в пикселях.
🧮 Разработка и использование парсера .NET AsciiMath в расширении Markdig
Эндрю Лок изучил несколько существующих решений, позволяющих конвертировать в MathML и отображать математические формулы, но ничего лучше портирования реализации Ruby AsciiDoctor на .NET не нашел.
Читайте подробнее о реализации и том, как автор использовал ChatGPT для упрощения рутинных задач.
Andrew Lock | .NET Escapades
Creating a .NET AsciiMath parser and using it in a Markdig extension
In this post I describe how I ported a Ruby AsciiMath implementation to .NET, created the AsciiMath NuGet package, and used it to create a Markdig extension
Разрабы
#рекомендации из выпуска с Анной Блок
👉 Анна Блок | FrontendBlok — телеграм-канал Анны Блок про фронтенд, вёрстку, удалёнку.
👉 Анна Блок — ютуб-канал Анны Блок.
👉 Новинки CSS — плейлист на Youtube, где Анна Блок рассказывает о новых свойствах и правилах CSS.
👉 Создание сайтов на практике — плейлист на Youtube с практикой создания сайтов с нуля.
👉 WebDX Community Group — страница сообщества, миссия которой является улучшения в подходах к веб-разработке.
👉 Записи встреч — на этом сайте есть возможность отслеживать, какие нововведения обсуждаются и потенциально могу появиться в веб-разработке.
👉 Baseline — тут можно узнать подробнее про стандарты поддержки браузерами новых и не очень свойств CSS.
____
Невышедший эпизод шоу "Тен за бугром" уже доступен на наших спонсорских площадках
Подписывайтесь!
https://sponsr.ru/myobrecheny
https://boosty.to/myobrecheny
https://patreon.com/myobrecheny
💬Go вы можете отформатировать строку без её вывода?
С использованием функции fmt.Sprintf. Она работает аналогично fmt.Printf, но вместо вывода результата в стандартный вывод, она возвращает отформатированную строку.
Мы можем использовать fmt.Sprintf для создания строк с переменными или сложными форматами, которые затем могут быть использованы в коде или сохранены для последующего использования.
https://dev.to/karenpayneoregon
DEV Community
Karen Payne — DEV Community Profile
Microsoft MVP, Microsoft TechNet author, Code magazine author, developer advocate.
Have a passion for driving race cars.
Н
Method value
(сам не знал сей термин 🙂
Значение метода.
Спека:
Method values
If the expression x has static type T and M is in the method set of type T, x.M is called a method value. The method value x.M is a function value that is callable with the same arguments as a method call of x.M. The expression x is evaluated and saved during the evaluation of the method value; the saved copy is then used as the receiver in any calls, which may be executed later.
type S struct { *T }
type T int
func (t T) M() { print(t) }
t := new(T)
s := S{T: t}
f := t.M // receiver *t is evaluated and stored in f
g := s.M // receiver *(s.T) is evaluated and stored in g
*t = 42 // does not affect stored receivers in f and g
Young Researchers Reward Program
⚡️Конкурс!⚡️
Наши друзья из Positive Technologies предоставили нам 6 проходок на PhD для проведения благотворительного конкурса. Читаем инфу ниже!
Открытое собеседование на Gо-разработчика
16 мая в 19:00 по мск приходи онлайн на Открытое собеседование от Эйч Навыков.
Как это будет:
1. Александр Трапезников, Тимлид в Яндекс Беспилотниках и ментор Эйч Навыков будет задавать реальные вопросы и задачи кандидату.
2. Потом Саша даст подробную обратную связь — объяснит, зачем задавал тот или иной вопрос, как лучше на него ответить или решить задачу
3. В конце можно будет задать любой вопрос Саша
Что узнаешь на Открытом собеседовании:
- Чего ждут от кандидатов на мидл-позиции в Gо-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить заветный оффер
Это бесплатно?
Бесплатно
Просто зарегистрируйся на открытое собеседование в нашем боте @skills_mentee_bot
Реклама: ООО “Эйч Карьера” erid: LjN8KKWRr
💬 В чем преимущество использования iota в Go?
iota — это предопределенное значение, которое можно использовать в объявлении const для создания последовательности связанных значений.
Использование приема с iota избавляет от необходимости вручную присваивать значения константам. Вместо этого можно записать такое определение:
type EventType byte
const (
_ = iota // iota == 0; игнорировать нулевое значение EventDelete
EventType = iota // iota == 1
EventPut // iota == 2; неявное присваивание
)
В объявлении константы iota представляет последовательно увеличивающиеся нетипизированные целочисленные значения, которые можно использовать для создания набора связанных констант. В начале каждого объявления const идентификатор iota получает нулевое значение и затем увеличивается с каждой операцией присваивания значения новой константе (независимо от использования ссылки на идентификатор iota).
Поскольку iota является нетипизированным числом, его можно использовать для присваивания типизированных значений без явного приведения типов, даже кон- станте с типом float64:
const (
u = iota * 42 // iota == 0; u == 0 (нетипизированная целочисленная константа)
v float64 = iota * 42 // iota == 1; v == 42.0 (константа типа float64)
)
Ключевое слово iota допускает неявное перечисление, что делает тривиальным создание произвольно длинных наборов связанных констант, как это показано в следующем примере, где перечисляются различные единицы измерения размеров в байтах:
type ByteSize uint64
const (
_ = iota
KB ByteSize = 1 << (10 * iota) MB
GB
TB
PB
)💬 Что такое идемпотентность?
Идея идемпотентности (тождественности влияния) зародилась в алгебре, где описывает определенные свойства некоторых математических операций.
В мире программирования операция считается идемпотентной, если ее однократное выполнение имеет тот же эффект, что и многократное. Например, операция присваивания
x = 1 идемпотентна, потому что после ее выполнения x всегда будет хранить 1, независимо от того, сколько раз ее выполнить.
Точно так же HTTP-метод PUT является идемпотентным, поскольку многократная отправка ресурса в какое-либо место ничего не изменит: повторная отправка не даст ничего нового. Операция x += 1, однако, не является идемпотентной, потому что после каждого ее выполнения создается новое состояние.💬 Чем отличаются сигналы Linux? Какие можно перехватить?
Сигналы в Linux представляют собой ограниченную форму межпроцессного взаимодействия, используемую для отправки уведомлений процессу о различных событиях. Они часто используются для уведомления процесса о необходимости завершения работы или информирования о возникновении какой-либо ошибки.
📌 Основные различия:
1. Синхронные сигналы — вызываются ошибками в программе (например, деление на ноль). Эти сигналы отправляются напрямую процессу, выполняющему ошибочное действие.
2. Асинхронные сигналы — посылаются внешними процессами или системой. Например, SIGKILL или SIGTERM, отправляемые для завершения процесса.
📌 Перехватываемые и неперехватываемые сигналы:
🔹 Перехватываемые сигналы могут быть обработаны программой. Программа может определить функцию-обработчик для таких сигналов, изменяя стандартное поведение. Например, SIGTERM и SIGUSR1 можно перехватить и обработать, выполнив определённые действия перед завершением программы или инициированием других процедур.
🔹 Неперехватываемые сигналы нельзя перехватить или проигнорировать. Эти сигналы немедленно выполняют своё стандартное действие. Примером неперехватываемого сигнала является SIGKILL, который всегда немедленно завершает процесс.
📌 Примеры перехватываемых сигналов:
🔹 SIGTERM — просит процесс завершиться. Это корректный способ попросить программу завершить свою работу.
🔹 SIGHUP — уведомляет процесс о потере управляющего терминала. Часто используется для перезагрузки конфигураций сервисов.
🔹 SIGUSR1, SIGUSR2 — резервируются для использования в пользовательских приложениях.
📌 Примеры неперехватываемых сигналов:
🔹 SIGKILL — немедленно завершает процесс. Не может быть перехвачен или обработан.
🔹 SIGSTOP — останавливает (приостанавливает) процесс до получения сигнала SIGCONT.
💬 Что из себя представляет механизм method value и чем он полезен?
Method value — механизм, который позволяет ссылаться на метод объекта с привязкой к конкретному экземпляру этого объекта. Это значит, что мы можем сохранить ссылку на метод определённого экземпляра и использовать эту ссылку для вызова метода позже, при этом метод автоматически будет вызываться для связанного с ним экземпляра.
📌 Как это работает: когда мы берём метод от экземпляра структуры или типа, Go автоматически создаёт функцию, которая "замыкает" этот экземпляр внутри себя. Эта функция при вызове будет применять метод к тому экземпляру, для которого она была создана.
📌 Пример:
type Counter struct {
value int
}
func (c *Counter) Increment() {
c.value++
}
func main() {
c := &Counter{value: 10}
increment := c.Increment // Сохраняем method value
increment() // Вызываем метод через сохранённую ссылку
fmt.Println(c.value) // Выведет 11
}
В примере increment является method value, которое привязано к конкретному экземпляру c. Вызов increment() эквивалентен вызову c.Increment().
Method value особенно полезны в ситуациях, когда необходимо передать метод как аргумент функции или сохранить метод для последующего вызова. Это позволяет использовать методы объектов так, как если бы они были обычными функциями, при этом сохраняя контекст вызова внутри метода.💬 Допустимо ли возвращать ответ "HTTP 200 OK", когда на стороне сервера произошла ошибка (сведения об ошибке будут содержаться внутри тела ответа)?
Допустимо для ошибок бизнес-логики приложения, однако в большинстве случаев это зависит от конкретного юзкейса.
Статус "200 OK" зачастую используется только тогда, когда запрос был успешно обработан и результаты этой обработки соответствуют ожиданиям клиента.
В случае возникновения ошибки следует использовать соответствующие статусы ответа HTTP, которые точно отражают природу проблемы. Например:
🔹
500 Internal Server Error — для неустранимых ошибок на стороне сервера.
🔹 503 Service Unavailable — если сервер временно недоступен, например, из-за перегрузки или технического обслуживания.
🔹 400 Bad Request — если ошибка возникла из-за некорректных данных, предоставленных клиентом.
🔹 404 Not Found — если запрос был направлен на несуществующий ресурс.
🔗 Все коды состояния ответа HTTP
🔗 Обсуждение на StackOverflowЕсли ты — golang-разработчик и страдаешь от недостатка профильных конференций, у нас для тебя клевая новость. Уже 13 мая стартует новый сезон Podlodka Go Crew с темой «базы данных». Мы в Podlodka организовываем онлайн-конференции по разным секциям разработки, так что тебе не придётся куда-то ехать. Все знания получишь прямо у экрана своего монитора.
⭐️ Научимся сравнивать библиотеки и ORM вместе с Арсеном Абдусаламовым из Авито. Познакомимся с решениями как можно подключаться к базам данных и узнаем про «Go way» способ.
⭐️ Попрактикуемся обращаться с распределённым MySQL с помощью Vitess вместе с Ильёй Ушаковым. Ведь одного инстанса MySQL в какой-то момент может начать не хватать. Что же делать, если переходить на NoSQL совсем неохота? Vitess — ответ на этот вопрос, золотая середина между NoSQL distributed базами данных и проверенным опытом MySQL.
⭐️ Узнаем всё о продвинутых структурах данных в Redis вместе с Олегом Арутюновым из Контура. Углубимся в преимущества и недостатки подхода, разберёмся с миграциями данных и оптимизацией базы.
⭐️ Мокать или предзаполнять базы данных? На этот вопрос ответят спикеры из Ozon Fintech. И это будет не просто доклад, а баттл: не на жизнь, а на смерть. Разберёмся, когда какой подход выбрать и стоит ли ограничиваться только одним.
🎁Бонус: публичный собес по работе с PostgreSQL. И это, естественно, не все сессии сезона.
Залетай за билетом, чтобы не пропустить специализированную конференцию для Golang-разработчиков
Реклама. ИП Толстая Елена Петровна
💬 Как использовать io.TeeReader в Go для логирования содержимого HTTP-запроса перед его обработкой? Каковы потенциальные преимущества и ограничения такого подхода?
io.TeeReader в Go используется для одновременного чтения данных из io.Reader и копирования этих данных в io.Writer. Это особенно полезно при логировании содержимого HTTP-запросов в мидлваре, позволяя одновременно читать и логировать данные, не теряя их для последующей обработки.
Преимущества использования io.TeeReader включают возможность прозрачного логирования данных запроса без изменения основного потока чтения данных. Ограничение заключается в том, что использование io.TeeReader может привести к незначительному увеличению задержек из-за дополнительной операции записи во время чтения данных.
📌 Простой пример:
package main
import (
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"strings"
)
func logRequestData(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Создание буфера для логирования данных запроса
var buf strings.Builder
teeReader := io.TeeReader(r.Body, &buf)
// Чтение и логирование содержимого запроса
body, err := ioutil.ReadAll(teeReader)
if err != nil {
http.Error(w, "Ошибка при чтении тела запроса", http.StatusInternalServerError)
return
}
// Запись данных обратно в тело запроса для последующей обработки
r.Body = ioutil.NopCloser(strings.NewReader(buf.String()))
// Вывод тела запроса в лог
log.Printf("Received request with body: %s", body)
// Продолжение обработки запроса
next.ServeHTTP(w, r)
})
}
func mainHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Запрос обработан")
}
func main() {
finalHandler := http.HandlerFunc(mainHandler)
http.Handle("/", logRequestData(finalHandler))
log.Println("Сервер запущен на порту 8080")
http.ListenAndServe(":8080", nil)
}
В примере мы создаем мидлваре, которая использует io.TeeReader для чтения тела HTTP-запроса, одновременно логируя его в stdout. Это позволяет сохранить неизменным первоначальный поток данных запроса для дальнейшей обработки в последующих обработчиках.💬 Как в Go отформатировать строку без её вывода?
С использованием функции
fmt.Sprintf. Она работает аналогично fmt.Printf, но вместо вывода результата в стандартный вывод, она возвращает отформатированную строку.
Мы можем использовать fmt.Sprintf для создания строк с переменными или сложными форматами, которые затем могут быть использованы в коде или сохранены для последующего использования.🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
+3
💬 Для каких целей могут использоваться функции с префиксом 'Must'?
Функции с префиксом "Must" ("must") предупреждают, что они могут вызвать панику, если что-то пойдет не так. Они часто используются для:
🔹 Инициализации задач, которые не должны завершаться неудачей, например, настройка глобальных переменных в начале приложения, настройка регулярных выражений, подключение к базам данных и т. д.
🔹 В кейсах тестирования они позволяют немедленно завершить тест с помощью
t.Fatal, если что-то идет не так.
Функции Must упрощают обработку ошибок в конкретных контекстах, но их следует использовать осторожно, чтобы избежать нежелательной паники.Repost from Библиотека ИИ для айтишников
😉 55 промтов для ChatGPT, которые помогут подготовиться к собеседованию
Вы когда-нибудь задумывались, как можно использовать искусственный интеллект для того, чтобы подготовиться к техническим собеседованиям лучше, быстрее и эффективнее? Мы вот — да! И поэтому подготовили 55 промтов, которые помогут сделать это.
В статье собраны шаблоны запросов, которые желательно «докрутить» под себя.
🔗 Читать статью
🔗 Зеркало
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
