Go — чек-лист
Чек-лист самопроверки
- Что такое Go и для каких задач он предназначен?
- Кто создал язык Go и когда он был представлен?
- Какие ключевые принципы легли в основу дизайна Go?
- Как происходит компиляция Go-программы?
- Что такое GOPATH и чем он отличается от Go Modules?
- Как инициализировать модуль в Go?
- Как добавить внешнюю зависимость в проект?
- Какие есть примитивные типы данных в Go?
- В чём разница между
int,int32,int64? - Как объявляются переменные (
var,:=)? - Что такое нулевые значения в Go?
- Как работают константы и
iota? - Какие есть составные типы (
array,slice,map,struct)? - В чём разница между массивом и срезом?
- Как создать и изменить срез?
- Что такое ёмкость (
cap) и длина (len) среза? - Как работают карты (
map) и как их инициализировать? - Что такое структуры (
struct) и как к ним обращаться? - Можно ли определять методы у структур?
- Поддерживает ли Go наследование? Если нет, то как достигается повторное использование кода?
- Что такое встраивание (
embedding) и как оно работает? - Как работают указатели в Go и чем они отличаются от C++?
- Что такое интерфейсы в Go и как они реализуются?
- Может ли тип реализовывать интерфейс неявно?
- Что такое пустой интерфейс (
interface{}) и когда его стоит использовать? - Как работают функции — параметры, возвращаемые значения, именованные результаты?
- Может ли функция возвращать несколько значений?
- Как обрабатываются ошибки в Go?
- Что такое
errorи как создавать пользовательские ошибки? - Что такое
deferи в каком порядке выполняются отложенные вызовы? - Как работают паника (
panic) и восстановление (recover)? - Что такое горутины и как их запускать?
- Что такое каналы (
channel) и какие виды бывают (буферизованные/небуферизованные)? - Как закрыть канал и как проверить, закрыт ли он?
- Что такое
selectи как он используется с каналами? - Как избежать состояния гонки при работе с общими данными?
- Какие примитивы синхронизации есть в пакете
sync(Mutex,WaitGroup,Once)? - Что такое пакет и как организована структура проекта?
- Как писать unit-тесты в Go?
- Как запустить тесты и получить покрытие кода?
- Что такое примеры (
Example-функции) и как они используются? - Как работает маршрутизация HTTP-запросов во встроенном пакете
net/http? - Как запустить HTTP-сервер?
- Как обрабатывать JSON в Go (
encoding/json)? - Как сериализовать и десериализовать структуры?
- Как работают теги в структурах (
json:"name")? - Что такое контекст (
context.Context) и зачем он нужен? - Как передавать отмену операции или таймаут через контекст?
- Как кросскомпилировать Go-приложение под другую ОС или архитектуру?
- Какие инструменты входят в стандартный toolchain (
go build,go run,go mod,go test,gofmt)? - Чем
len(string)отличается от числа рун в строке? - Зачем нужны
html/templateи чем они отличаются отtext/template? - Как устроены middleware поверх
http.Handler? - Что делает
go test -race?
go test -race
- Для чего используют
go work,go mod vendorи//go:embed?
go mod vendor
- Что такое type parameter и constraint в дженериках Go?
- Чем gRPC отличается от REST JSON для связи микросервисов?
- Для чего нужны cobra и viper в CLI-утилите?
- Как снять CPU-профиль через
pprofи зачемgo tool trace? - Что делает
go test -fuzzи чем fuzz дополняет table-driven тесты? - Зачем нужны WebSocket и чем они отличаются от long polling REST?
- Как поднять endpoint
/metricsдля Prometheus наnet/http? - Для чего
t.TempDir,t.Cleanupи пакетtesting/quick? - В каком порядке выполняются
init()в Go-пакетах?
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.