Что важно знать
- Тип реализует интерфейс, если имеет его методы — без объявления.
- Маленькие интерфейсы (
io.Reader) — идиома Go. - Интерфейс — пара (тип, значение); nil-указатель внутри не nil.
Неявная реализация, пустой интерфейс, type switch, nil-интерфейс.
io.Reader) — идиома Go.Практика. Сделать хранилище с интерфейсом и двумя реализациями — в памяти и в файле.
Практика. Воспроизвести ловушку nil-интерфейса при возврате ошибки и исправить.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
any (= interface{}) — интерфейс без методов, ему удовлетворяет любой тип. Достать конкретный тип — type assertion v, ok := x.(string) (без ok при несовпадении — panic) или type switch по нескольким типам.
Полный разборС Go 1.18 функции и типы принимают параметры типов с ограничениями — интерфейсами, которые могут перечислять допустимые типы: func Max[T cmp.Ordered](a, b T) T. Применение — контейнеры и алгоритмы над разными типами (пакеты slices, maps). Для поведения…
Полный разборТип удовлетворяет интерфейсу автоматически, если у него есть все методы интерфейса — без слова implements. Поэтому интерфейсы объявляют у потребителя и делают маленькими (io.Reader — один метод). «Принимай интерфейсы, возвращай структуры».
Полный разборИнтерфейсное значение — пара (тип, значение). Оно равно nil, только когда обе части nil. Если положить в интерфейс nil-указатель конкретного типа, тип уже заполнен — интерфейс не nil, и err != nil срабатывает.
Полный разборНаследования нет. Встраивание — поле без имени: методы и поля встроенного типа продвигаются во внешний и вызываются напрямую. Это композиция, а не наследование: нет переопределения с полиморфизмом — встроенный тип не знает о внешнем.
Полный разборУказатель func (s Svc) — если метод меняет получателя, структура большая или содержит то, что нельзя копировать (sync.Mutex). Значение func (p Point) — для маленьких неизменяемых типов. Получатели одного типа делают единообразными.
Полный разборПосле собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.