Назад к вопросам
VK Cloud
Senior
4
Что означает конструкция `var _ Interface = (*Type)(nil)` в Go?
Компании, где спрашивали
Ответ от нейросети
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, компилятор выдаст ошибку.