Библиотека Go для собеса | вопросы с собеседований
6.92K subscribers
252 photos
10 videos
1 file
595 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Какая разница между пустым select и пустым for

Это два способа создания бесконечного цикла, но они кардинально отличаются по поведению и потреблению ресурсов.

select {} — горутина блокируется навсегда, не потребляет CPU потому что горутина паркуется runtime'ом.

for {} — это бесконечный цикл, 100% CPU одного ядра потому что постоянно проверяет условие цикла.

🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Зачем в появились errors.Is и errors.As, если уже есть сравнение err == someErr

errors.Is и errors.As нужны для корректной работы с обёрнутыми ошибками, когда err содержит не просто константу, а стек контекста.

Обычное сравнение err == someErr работает только если:

• err указывает ровно на ту же ошибку, что и someErr.

• ошибка не была обёрнута через fmt.Errorf("%w", err) или аналогичные механизмы.

Как только добавляется контекст fmt.Errorf("read config: %w", err), внешнее значение меняется, и == уже не срабатывает, хотя внутри всё ещё лежит исходная ошибка.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Что делает errors.Is

errors.Is разбирает цепочку обёрнутых ошибок и проверяет, эквивалентна ли какая‑то ошибка внутри этой цепочки целевой ошибке.

Функция errors.Is вызывает Unwrap у ошибки, если она его реализует и проходит по всей цепочке обёрток, пока не найдёт совпадение по ==, либо через метод Is, если он реализован у ошибки.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Что делает errors.As

errors.As проходит по цепочке обёрнутых ошибок и пытается найти в ней значение, которое можно привести к заданному типу, записывая найденную ошибку в переданный указатель и возвращая true при успехе.

Функция вызывается как errors.As(err, &target), где target — указатель на переменную интерфейсного или конкретного типа ошибки, например, *os.PathError.

Внутри она разворачивает ошибку через Unwrap, проверяя каждое звено цепочки на возможность присваивания в target по правилу совместимости типов.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2
В чём разница между errors.Is и errors.As

errors.Is(err, target) — проверяет, встречается ли где‑то внутри обёрток ошибка target по значению.

errors.As(err, &target) — ищет внутри обёрток ошибку определённого типа и, если находит, кладёт её в target.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍43🥱2
Что делают json.Marshal и json.MarshalIndent, чем они отличаются

json.Marshal и json.MarshalIndent оба кодируют значение в JSON, но Marshal выдаёт компактный JSON в одну строку, а MarshalIndentчеловекочитаемый JSON с отступами и переводами строк.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Избегай Race Condition в карьере

Пока другие учат только синтаксис Go, ты можешь освоить архитектуру высоконагруженных систем. На собеседованиях в BigTech смотрят не на то, как ты пишешь if err != nil, а на то, как ты строишь взаимодействие сервисов.

Оффер 1 + 2:

Покупаешь один курс (основной), получаешь доступ к трем.

Мастхэв для гофера:

— Архитектуры и шаблоны проектирования;
— Алгоритмы и структуры данных.

Задеплоить знания

Таймаут: 31 декабря.
Ментор здесь: @manager_proglib
Как с помощью тегов json:"..." управлять именами полей, пропуском полей и именами с разным регистром при маршалинге

Теги json:"..." — это подсказки для пакетa encoding/json, как именно записывать поля структуры в JSON.

Без тегов Go сам придумывает имя поля в JSON из имени поля структуры: Name"Name", UserID"UserID".

Изменение имени поля:
type User struct {
Name string `json:"name"`
Email string `json:"email_address"`
}


Полностью скрыть поле («-»):
type User struct {
Name string `json:"name"`
Password string `json:"-"`
}


Password вообще не появится в JSON.

Пропускать пустые поля (omitempty):
type User struct {
Name string `json:"name"`
Email string `json:"email,omitempty"`
}


🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Как json.Marshal обрабатывает экспортируемые и неэкспортируемые поля структуры

json.Marshal кодирует в JSON только экспортируемые поля структуры и игнорирует неэкспортируемые, даже если для них указаны теги.

Теги json:"..." не делают поле видимым для json.Marshal, если оно неэкспортируемое.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Как замаршалятся анонимные/встраиваемые структуры и поля с тегами, если в иерархии есть конфликт имён

При маршалинге анонимные структуры разворачиваются в один общий JSON-объект, но при конфликте имён действует правило приоритета: явные теги выигрывают, при прочих равных побеждает поле из более внешнего уровня.

Конфликт имён без тегов

type A struct {
Name string
}
type B struct {
Name string
}
type C struct {
A
B
}


У C два поля Name на одном уровне вложенности, и json.Marshal не сможет выбрать однозначно: такое поле считается конфликтным и пропускается.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Как маршалятся в JSON разные типы: string, int, float64, bool, slice, map, struct, nil

Базовые типы

• string → JSON-строка: "hello""hello".

​• int, uint, float64 и т.п. → JSON-число: 42, 3.14.

​• bool → JSON-логическое: true / false.

— Срезы и массивы


• slice/array → JSON-массив: []int{1, 2}[1,2].

​• Срез строк → []string{"a", "b"}["a","b"].

Мапы

map[string]T → JSON-объект: {"a":1}.

Ключи должны быть строками, целыми числами или должны реализовать TextMarshaler. Для других типов ключей Marshal вернёт ошибку.

Структуры

• struct → JSON-объект с полями: экспортируемые поля становятся полями JSON по имени или по тегу json:"...".

Вложенные и embedded-структуры разворачиваются в соответствующие вложенные объекты/поля. ​

nil

• nil интерфейс, nil slice/map/pointer → JSON null, если само значение маршалится напрямую.

При этом nil-срез кодируется как null, а не как [], если только вы отдельно не инициализируете его пустым.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Влияет ли MarshalIndent только на форматирование, или может менять порядок полей/значения по сравнению с Marshal

MarshalIndent влияет только на форматирование (пробелы, переводы строк, отступы). Порядок полей и сами значения он не меняет по сравнению с Marshal.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Как реализовать собственный формат сериализации для типа и когда это нужно

Собственный формат сериализации задаётся реализацией интерфейса json.Marshaler — то есть методом MarshalJSON() ([]byte, error) у типа.

Это нужно, когда стандартное поведение encoding/json не подходит: особый формат даты, обёртка, маскирование.

Пример:
func (t MyTime) MarshalJSON() ([]byte, error) {
// хотим формат "YYYY|MM|DD"
s := t.Format("2006|01|02")
return json.Marshal(s)
}


🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥81👍1🥱1
ЭТОТ ПОСТ СПАСЕТ ТВОЙ 👩‍💻-СОБЕС

В наше время очень тяжело попасть на собеседование! Поэтому предлагаем вам очень серьезно относиться к ним.
Не упускайте не единое собеседование, готовьтесь к каждому, как к последнему.
Регулярно проверяйте свои hard-skills.
Забирай чек-лист из закрепленного сообщения - 55 вопросов из реальных собесов!

P.S. помимо непосредственно GO, разбираем другие необходимые технологии, про них нельзя забывать!

Помни, что каждое собеседование в 2025 на вес золота!

Реклама. Заимкин Святослав Валерьевич, ИНН 781430725000. Erid 2VtzqvB5FRL
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1🥰1
Какие параметры принимает json.MarshalIndent, что означают prefix и indent

json.MarshalIndent принимает те же данные, что и Marshal, плюс два строковых параметра prefix и indent, которые управляют только форматированием человекочитаемого JSON.

prefix — строка, которая ставится в начале каждой строки JSON. Обычно пустая, иногда используют для логов.

indent — строка для каждого уровня вложенности: например " " или "\t"

Во всех случаях prefix и indent не влияют на порядок полей и значения, только на внешний вид текста JSON.

🎁 Новогодняя акция: 3 курса по цене 1
🤝
Помощь с выбором курса

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM