TGViewer
Channel Public Channel
Библиотека Go для собеса | вопросы с собеседований

Библиотека Go для собеса | вопросы с собеседований

@go_interview_lib

Вопросы с собеседований по Go и ответы на них.

Учиться у нас: clc.to/iEeaZw

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

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

Наши каналы: https://t.me/proglibrary/9197
Subscribers
7.47K
Photos
286
Videos
12
Links
874
Recent Posts 20 shown
Post #1492 605
А вы уже забрали свой подарок ко Дню программиста?

К вашему профессиональному празднику Tproger, Proglib, Столото, Центральный университет и SmartApe собрали целую коробку подарков. Переходите по ссылке, трясите коробку и забирайте свой презент: https://tprg.ru/tE1M

Реклама. ИП Михайлишина Гузель Фаниловна, erid: 2W5zFJrVGHw
  • 🥱 1
Post #1491 1K
Какой максимальный размер бинарного файла можно собрать

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

Размер бинарника растёт из-за нескольких вещей:

Статическая линковка. Go по умолчанию собирает всё в один файл — рантайм, стандартная библиотека, все зависимости. Никаких внешних .so или .dll. Это удобно при деплое, но увеличивает размер даже у простой программы.

Встроенные ресурсы. Через //go:embed можно упаковать в бинарник статику, шаблоны, миграции. Добавили папку с фронтендом — бинарник вырос на её размер.

Отладочная информация. По умолчанию Go включает в бинарник DWARF-символы и таблицы имён. Это нужно для профилировщика и стектрейсов, но добавляет вес.

Если размер важен, его можно уменьшить флагами линковщика:

go build -ldflags="-s -w" -o app .

-s убирает таблицу символов, -w отключает DWARF. Бинарник становится меньше на 20–30%, но отладка по нему будет затруднена.

Дополнительно можно прогнать через upx — утилита сжимает исполняемый файл, он распаковывается уже в памяти при запуске.


🐸Библиотека Go для собеса
  • 👍 4
Post #1490 942
😭 Как не потратить недельный лимит AI-кодинга за три дня?

Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.

🔘 Поговорим о том:

— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.

✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.

⬇️ 17 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок

💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.

🔗 Зарегистрироваться на вебинар⁠
  • 😁 1
Post #1487 2.25K
Объясните разницу между безопасным доступом к байтам строки через срез и использованием unsafe

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

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

🐸 Библиотека Go для собеса
  • 👍 3
Post #1486 2.1K
Покупать новый курс каждый раз, когда меняется рабочая задача, — довольно странная механика. Нашли альтернативу ❓
Post #1485 1.72K

Forwarded from Proglib.academy | IT-курсы

👅 Самое сложное — выбрать не курс, а направление

Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science.

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

В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.


Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎

🔗 Узнать подробнее

🏃‍♀️ Proglib Academy
Post #1484 1.91K
Как создать свою кастомную ошибку в Go

Пакет errors — самый быстрый способ

Подходит для простых статичных ошибок. Такую переменную удобно объявить один раз и сравнивать через errors.Is.
var ErrNotFound = errors.New("запись не найдена")


fmt.Errorf() — когда нужен контекст

Позволяет подставить в текст детали. А глагол %w ещё и «оборачивает» исходную ошибку, сохраняя цепочку для errors.Is / errors.Unwrap.

return fmt.Errorf("не удалось загрузить юзера %d: %w", id, ErrNotFound)


• Кастомный тип через
struct — максимум гибкости

Нужен, когда к ошибке хочется прикрепить данные (код, поле, статус). Достаточно реализовать метод Error() string — и тип становится ошибкой.
type ValidationError struct {
Field string
Msg string
}

func (e *ValidationError) Error() string {
return fmt.Sprintf("%s: %s", e.Field, e.Msg)
}


Такую ошибку потом можно вытащить через errors.As и прочитать её поля.

🐸 Библиотека Go для собеса
  • 👍 4
Post #1483 1.56K
Что делает CGO_ENABLED

CGO_ENABLED — это переменная окружения, которая включает или выключает CGo при сборке Go-приложений. Принимает два значения: 1 (включено) и 0 (выключено).
CGo — это механизм, позволяющий Go-коду взаимодействовать с C: вызывать C-функции и использовать C-библиотеки прямо из Go-программы.

Зачем этим управлять:

CGO_ENABLED=0 даёт полностью статический бинарник без зависимостей от системных C-библиотек — удобно для минимальных Docker-образов (scratch, alpine) и упрощает кросс-компиляцию.

CGO_ENABLED=1 нужен, когда проект реально использует C-код или библиотеки, завязанные на cgo

CGO_ENABLED=0 GOOS=linux go build -o app


Важный нюанс: по умолчанию CGo включён, но при кросс-компиляции (когда GOOS/GOARCH отличаются от хостовых) Go автоматически отключает его, если не задан C-кросс-компилятор.

🐸 Библиотека Go для собеса
  • ❤ 1
Post #1482 921

Forwarded from Proglib.academy | IT-курсы

🎯 У разработчика, DevOps-инженера и техлида разные причины задуматься о системной работе с AI-агентами

Но цель одна: перейти от случайных удачных запусков к управляемому процессу на реальном проекте — с понятными правилами, ревью, контролем расходов и безопасности ✔️

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

⚡️ Предзапись на осенний поток уже открыта

🏃‍♀️ Proglib Academy
Post #1481 1.16K
Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇
Post #1480 1.26K
Что делает переменная окружения GOOS в Go

GOOS задаёт целевую операционную систему, под которую компилируется Go-приложение. Она используется при кросс-компиляции — когда код пишется на одной платформе, а собирается под другую (часто в паре с GOARCH, задающей архитектуру процессора).
GOOS=linux GOARCH=amd64 go build


Основные значения
GOOS (именно в таком виде, в нижнем регистре):
linux
windows
darwin — macOS (не macos)
ios
android
freebsd
openbsd
netbsd
plan9

Полный актуальный список можно получить командой go tool dist list.

🐸 Библиотека Go для собеса
  • ❤ 2
  • 👍 1
Post #1478 1.23K
Как работает пробинг в Swiss Table

1. Считается хеш ключа и делится на две части.

На поддерживаемых CPU используется aeshash, иначе — memhash. Полученный хеш разбивается на:

H1 (старшие 57 бит) — выбирает стартовую группу;
H2 (младшие 7 бит) — «отпечаток» (fingerprint) ключа.

2. Внутри группы контрольные байты проверяются параллельно через SIMD.
Каждая группа — это 8 слотов и 8-байтовый control word, где каждый байт хранит H2 своего слота. Одной SIMD-инструкцией H2 искомого ключа сравнивается сразу со всеми 8 байтами → получаем маску кандидатов. Только для совпавших по fingerprint слотов сверяется полный ключ.

3. Если совпадений нет и пустого слота в группе тоже нет — переходим к следующей группе.
Пробинг идёт по группам квадратично, но по треугольным числам:
offset = (offset + i) mod size,  i = 1, 2, 3, 4...
→ смещения: h, h+1, h+3, h+6, h+10, ...


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

🐸 Библиотека Go для собеса
  • 👍 3
Post #1476 1.36K
Что будет, если вызвать time.Sleep(0)

Вопреки распространённому мифу — практически ничего. time.Sleep с длительностью ≤ 0 сразу возвращает управление: горутина не «усыпляется» и не уступает планировщику. По сути это no-op.

Часто думают, что time.Sleep(0) отдаёт управление планировщику Go и позволяет переключиться на другие горутины. Но за это отвечает другая функция:
runtime.Gosched() // вот это уступает управление планировщику

Gosched() снимает текущую горутину с процессора и ставит в очередь, давая шанс другим. А time.Sleep(0) этого не делает — если нужен именно yield, используйте runtime.Gosched().

🐸 Библиотека Go для собеса
Post #1475 940

Forwarded from Proglib.academy | IT-курсы

У вас в проекте есть файл вроде utils_v2_final_FIX.py, который все боятся трогать

Что делаете с таким легаси?

❤️ Не трогаю: работает — и ладно
👍 Переписываю с нуля и надеюсь на лучшее
🔥 Сначала покрываю тестами, потом рефакторю по частям
👾 У нас такого нет — честно-честно

На курсе «ИИ для разработчиков» разберём третий подход: как с помощью агента зафиксировать текущее поведение легаси-кода тестами, а затем менять его небольшими безопасными шагами — без одного огромного PR на тысячу файлов.

До 31 июля действует скидка и бессрочный доступ к материалам.

🔗 Занять место со скидкой

🏃‍♀️ Proglib Academy
Post #1474 1.33K
Когда название файла уже само по себе считается техническим долгом 👇
Post #1473 1.53K
Что такое fallthrough в Go

fallthrough — это ключевое слово внутри switch, которое передаёт управление следующему case, не проверяя его условие.

В отличие от C и многих других языков, в Go switch по умолчанию не «проваливается» дальше: выполнение завершается сразу после первого совпавшего case, без явного break. fallthrough включает обратное поведение — принудительный переход к следующему блоку.

switch n {
case 1:
fmt.Println("один")
fallthrough
case 2:
fmt.Println("два") // выполнится, даже если n == 1
default:
fmt.Println("другое")
}


Важные нюансы:

fallthrough передаёт управление безусловно — условие следующего case игнорируется.

• Он должен стоять последним оператором в case, иначе будет ошибка компиляции.

• Из последнего case (или default, если он в конце) провалиться некуда — там fallthrough использовать нельзя.

🐸 Библиотека Go для собеса
  • ❤ 4
Post #1472 1.15K
В чём разница между //go:build и // +build

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

// +build — старая форма, использовавшаяся до Go 1.17:

• Размещается в начале файла, до объявления пакета.

• После блока директив обязательна пустая строка.

• Условия комбинируются неочевидно: пробел означает «И», запятая — «ИЛИ», а несколько строк — тоже «И». Это часто путало.

//go:build — новая форма, введённая в Go 1.17:

• Использует привычные логические выражения с &&, ||, ! и скобками.

• Читается гораздо понятнее.

// Старая форма:
// +build linux,amd64 darwin

// Новая форма:
//go:build (linux && amd64) || darwin


Начиная с Go 1.17, инструмент gofmt автоматически добавляет //go:build рядом со старыми // +build, синхронизируя их. Сегодня рекомендуется использовать именно //go:build, а старую форму оставляют лишь для совместимости со совсем древними версиями Go.

🐸 Библиотека Go для собеса
  • 👍 4
  • ❤ 2
Post #1471 1.48K
Что особенного в chan struct{}

chan struct{} — это канал, по которому передаётся не данные, а сам факт сигнала. Пустая структура struct{} не занимает памяти (0 байт), поэтому такой канал явно говорит читателю кода: «здесь важно только событие, а не его содержимое».

Типичные сценарии:

Сигнал завершения / отмены. Закрытие канала (close(done)) разом оповещает всех, кто его слушает.

Синхронизация горутин. Одна горутина ждёт, пока другая пошлёт сигнал ch <- struct{}{}.

Семафоры и ограничение параллелизма, где важен сам факт занятости слота, а не передаваемое значение.

done := make(chan struct{})

go func() {
// ... работа ...
close(done) // сигнализируем о завершении
}()

<-done // ждём сигнал


Почему именно struct{}, а не, например, chan bool: булев канал намекает, что значение (true/false) несёт смысл, хотя на деле его игнорируют. chan struct{} выражает намерение точнее — «данных нет, есть только событие» — и не тратит память на само значение.

🐸 Библиотека Go для собеса
  • ❤ 1
Post #1470 885

Forwarded from Proglib.academy | IT-курсы

📈 Скоро фраза «умею пользоваться AI» в резюме будет звучать так же странно, как сегодня «умею пользоваться Git»

Это просто станет частью профессии. А вот умение встроить AI в процесс разработки так, чтобы он действительно ускорял работу команды, останется конкурентным преимуществом 💡

🔜 На курсе «ИИ для разработчиков» участники работают со своими проектами и учатся делать AI частью ежедневной разработки: планировать задачи, писать код, проверять изменения, готовить PR и автоматизировать рутину.

До конца июля действует специальная цена — 59 990 ₽ вместо 79 990 ₽ 🥳 И получить бессрочный доступ ко всем материалам курса.

🔗 Посмотреть, как устроен курс

🏃‍♀️ Proglib Academy
  • ❤ 1
Post #1469 1.18K
😮‍💨 До конца июля сохраняются две приятные вещи: специальная цена и бессрочный доступ к материалам курса. Подробнее — в посте 👇
Older posts →

About this channel

How can I read @go_interview_lib without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Библиотека Go для собеса | вопросы с собеседований: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Библиотека Go для собеса | вопросы с собеседований have?
Библиотека Go для собеса | вопросы с собеседований (@go_interview_lib) has 7.47K subscribers on Telegram, refreshed roughly every 30 minutes.
Does Библиотека Go для собеса | вопросы с собеседований know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →