Sobes.tech
Назад к вопросам
Senior
4

Что означает конструкция `var _ Interface = (*Type)(nil)` в Go?

Компании, где спрашивали
VK CloudVK Cloud

Ответ от нейросети

sobes.tech AI

Конструкция var _ Interface = (*Type)(nil) в Go используется для проверки на этапе компиляции, что тип *Type реализует интерфейс Interface.

Объяснение:

  • (*Type)(nil) — это нулевой указатель на тип Type.
  • Присваивание его переменной типа Interface заставляет компилятор проверить, реализует ли *Type все методы интерфейса.
  • Переменная с именем _ — это анонимная переменная, которая не используется, поэтому код не занимает память.

Это своего рода статический assert, который помогает избежать ошибок, если интерфейс или тип изменятся, и реализация перестанет соответствовать интерфейсу.

Пример:

type Reader interface {
    Read(p []byte) (n int, err error)
}

type MyReader struct {}

func (r *MyReader) Read(p []byte) (int, error) {
    return 0, nil
}

var _ Reader = (*MyReader)(nil) // Проверка реализации интерфейса Reader

Если MyReader не реализует Read, компилятор выдаст ошибку.