Библиотека Go для собеса | вопросы с собеседований
6.85K subscribers
233 photos
9 videos
1 file
481 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
Что такое волшебное (магическое) число

Волшебное число — это число, которое захардкожено в программе и не имеет комментариев к его использованию.

Пример:
// Плохой вариант с волшебным числом
if statusCode == 200 {
// Выполняем код
}

// Хороший вариант с именованной константой
const OK = 200
if statusCode == OK {
// Выполняем код
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Объясните разницу между безопасным доступом к байтам строки через срез и использованием unsafe

Когда строку преобразуют в срез байтов, создаётся новая копия данных, и доступ к этим данным безопасен, но это также означает, что данные строки не изменяются.

unsafe позволяет работать с указателями и памятью напрямую, что даёт больше гибкости, но это также приводит к неопределённому поведению, если использовать эти указатели для изменения данных.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Что такое Escape-последовательность

Escape-последовательности обычно начинаются с символа обратной косой черты (\)специальные символы, управляющие символы или символы, имеющие особое значение.

Примеры:
\n — символ новой строки (Line Feed, LF)
\t — символ табуляции (Tab)
\\ — обратная косая черта
\' — одинарная кавычка
\" — двойная кавычка
\r — возврат каретки (Carriage Return, CR)
\b — удаление предыдущего символа (backspace)
\f — сивол перехода на новую страницу (Form Feed)
\u или \U — Unicode символ (например, \u0041 — для 'A')


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

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

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4🥱4😢2
Что будет, если использовать пакет из _ импорта?

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

Если попытаться обратиться к элементам этого пакета, компилятор Go выдаст ошибку, так как они не были явно экспортированы и доступны для использования.

Однако сам пакет всё равно будет выполнен, и его инициализация произойдёт.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1
Почему структура struct{ int; string } может быть ключом в мапе, а []byte — нет

Go требует, чтобы типы данных, используемые как ключи в map, были сравнимыми. Это означает, что для них должно быть определено сравнение на равенство.

Структуры в Go могут быть использованы в качестве ключей в мапе, если все поля структуры являются сравнимыми.

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2
Почему nil-интерфейс может вести себя неожиданно при сравнении с nil

В Go nil-интерфейс не содержит ни значения, ни типа. Он представлен внутренне как структура с двумя полями: type и value. Если оба поля равны nil, то интерфейс считается nil.

Однако поведение может быть неожиданным, когда интерфейс содержит указатель на nil-объект, который реализует интерфейс. В этом случае сам интерфейс не равен nil, потому что поле type заполнено, хотя поле value равно nil.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI

24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.

Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».


На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.

Подробности рассказываем в гс выше — включай, чтобы не пропустить.
Почему модули пришли на смену GOPATH

Главная проблема GOPATH заключалась в отсутствии контроля версий зависимостей.При использовании GOPATH система собирала проект из тех пакетов, которые уже находились на локальной машине.

Из-за этого разные разработчики могли получать различные версии зависимостей при сборке одного и того же проекта.

Go модули решили эту проблему, введя строгое версионирование. Они фиксируют точные версии всех зависимостей и используют файл go.sum для проверки их целостности.

Благодаря этому любой разработчик получает идентичный набор зависимостей при клонировании проекта.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🥱1
Объясните, почему в Go интерфейсы реализованы через внутренний кортеж (type, value)

Такой подход позволяет интерфейсу быть универсальным контейнером для любых типов, которые реализуют его методы. Благодаря этому Go может вызывать методы интерфейса динамически, независимо от конкретного типа объекта, который хранится внутри интерфейса.

В реализации это выглядит как структура с указателем на таблицу методов и указателем на конкретные данные.

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
Объясните, чем отличается конкретный тип от типизированного интерфейса с точки зрения компилятора и рантайма

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

В рантайме конкретный тип представлен как обычная структура в памяти, и Go не хранит дополнительной информации о динамическом типе — всё известно заранее.

Типизированный интерфейс — это абстракция, которая описывает набор методов, но не фиксирует конкретный тип объекта. На этапе компиляции компилятор проверяет, что присваиваемый объект реализует все методы интерфейса, но сам конкретный тип известен только частично — как «реализует интерфейс».

В рантайме интерфейс хранит две вещи: динамический тип объекта (type) и динамическое значение (value). Это позволяет Go вызывать методы интерфейса динамически, независимо от конкретного типа объекта, который был присвоен интерфейсу.

Разница в том, что конкретный тип — это статическая, полностью известная структура, а интерфейс — динамическая обёртка, которая хранит тип и значение для полиморфного вызова методов.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥61
Как в Go сделать readonly коллекцию

В Go нет встроенного механизма readonly, как в C# или Java, поэтому неизменяемости достигают через инкапсуляцию и интерфейсы.

Например, если нужно сделать слайс доступным только для чтения, можно спрятать сам слайс в структуру, а наружу отдать интерфейс только с методами чтения.

type ReadonlySlice[T any] interface {
Len() int
Get(i int) T
}

type sliceWrapper[T any] struct {
data []T
}

func (s *sliceWrapper[T]) Len() int { return len(s.data) }
func (s *sliceWrapper[T]) Get(i int) T { return s.data[i] }

func NewReadonlySlice[T any](src []T) ReadonlySlice[T] {
copyData := make([]T, len(src))
copy(copyData, src)
return &sliceWrapper[T]{data: copyData}
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🔥 Не пропустите событие осени для AI-комьюнити

24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»

😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%

⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.

Мест мало, регистрация закроется, как только забьём комнату
Расскажите, что такое паттерн фабрика и в каких случаях его целесообразно использовать

Фабрика — это порождающий паттерн, который создаёт объекты без привязки клиентского кода к конкретным типам. Он позволяет клиенту работать с интерфейсами, скрывая реализацию конкретных объектов. В Go фабрика обычно возвращает интерфейс, а внутри создаёт указатель на конкретную структуру.

Использовать фабрику стоит, когда:

• Нужна централизованная логика создания объектов;
• Требуется полиморфизм, чтобы клиент не знал конкретный тип;
• Планируется расширение системы новыми типами без изменения клиентского кода;
• Необходимо упростить тестирование через замену объектов на моки.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня премьера

В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным«ИИ-агенты: новая фаза развития искусственного интеллекта».

В программе:
— почему агенты ≠ чат-боты;
— живое демо простого агента;
— и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского.

Это прямой эфир: подключиться можно через лендинг курса.
Где Go хранит загруженные зависимости локально

Зависимости хранятся в GOPATH/pkg/mod (модульный кэш), а не в папке проекта. Это позволяет повторно использовать одну и ту же версию пакета в нескольких проектах.

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

Каждый контекст, который может быть отменён (WithCancel, WithTimeout, WithDeadline), содержит канал Done(), который закрывается, когда контекст отменяется или истекает дедлайн.

select {
case <-ctx.Done():
fmt.Println("Context cancelled or deadline exceeded:", ctx.Err())
default:
// Продолжаем работу
}


Метод Err() позволяет получить конкретную причину, по которой контекст завершился.

ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

time.Sleep(2 * time.Second) // превышаем таймаут

if err := ctx.Err(); err != nil {
fmt.Println("Context error:", err) // выведет: DeadlineExceeded
}


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

Формально они не делятся на типы, но по применению можно выделить обычные (для асинхронных задач), для параллелизма (с sync.WaitGroup или каналами), для обработки событий (например, в серверах), в пуле воркеров (для управления нагрузкой) и фоновые (для длительных задач).

Их поведение определяется контекстом и механизмами синхронизации, такими как каналы или мьютексы.

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