Оценка знаний по Go
Что проверяют
Вопрос разведочный: по вашему ответу выбирают, куда копать дальше. Ждут, что вы сами разложите опыт по темам, назовёте границу своих знаний и приведёте примеры из работы, а не перечислите оглавление учебника.
Как отвечать
Пройдите по каркасу языка, называя понимание, а не определения.
- конкурентность: горутины дёшевы, но не бесплатны; канал это средство синхронизации, а не очередь на любой случай;
selectс таймаутом,contextдля отмены,sync.WaitGroupи мьютекс там, где канал избыточен; гонки ищутся прогономgo test -race; - ошибки: возвращаемые значения вместо исключений, обёртывание через
fmt.Errorfс глаголом%w, разбор черезerrors.Isиerrors.As,panicтолько на действительно невосстановимое; - типы и память: что копируется при передаче значения и когда нужен указатель, интерфейс как пара из типа и значения и классическая ловушка с ненулевым интерфейсом поверх нулевого указателя, работа сборщика мусора и уход переменной в кучу;
- инструменты:
go vet, профилирование черезpprof, бенчмарки и табличные тесты вtesting, модули и версионирование; - стандартная библиотека:
net/httpкак рабочий сервер без фреймворка,encoding/json,database/sql.
Обязательно приземлите на сделанное руками: какой сервис, какая нагрузка, что чинили. Оценка без примера не читается.
Где спотыкаются
Пересказывают определения: горутина это лёгкий поток, канал это способ общения. Следующий вопрос будет про запись в закрытый канал, про чтение из закрытого или про поведение нулевого канала, и там ответ обычно заканчивается.
Второе: переносят привычки из других языков. Заранее строят иерархии интерфейсов, заворачивают каждую структуру в геттеры, эмулируют исключения через panic и recover в бизнес-логике. В Go интерфейс объявляют маленьким и на стороне потребителя.
Третье: заявляют уверенность в конкурентности и не могут сказать, что происходит при утечке горутины. Горутина, повисшая на записи в канал, который никто не читает, живёт до конца процесса, и такие утечки видно в pprof. Если этого в опыте не было, честнее обозначить уровень, чем изображать.