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