Что делает этот фрагмент кода Go?
var _ interface {
add(string) error
} = &watcher{}
Я считаю, что &watcher{}
возвращает две вещи, первая отбрасывается, а вторая назначается ... интерфейсу? Я нашел код в fswatch на Github.
Что делает этот фрагмент кода Go?
var _ interface {
add(string) error
} = &watcher{}
Я считаю, что &watcher{}
возвращает две вещи, первая отбрасывается, а вторая назначается ... интерфейсу? Я нашел код в fswatch на Github.
Эта конструкция объявит переменную с именем пустого идентификатора с типом, заданным литералом типа; определение интерфейса в этом случае. Далее следует выражение инициализатора — в данном случае указатель на составной литерал.
Общая функциональность фрагмента заключается в том, чтобы статически гарантировать, что *watcher
удовлетворяет указанному интерфейсу, поскольку переменная _
никоим образом не материализуется, и можно наблюдать только любые возможные побочные эффекты инициализатора. Либо статический (как в этом случае), либо динамический (например, вызов функции, которая во время выполнения назначает, скажем, некоторые глобальные переменные, регистрирует обработчик и т. д.)