Спецификации: Какова цель пустого идентификатора в присвоении переменной?
Я нашел это объявление переменной var _ PropertyLoadSaver = (*Doubler)(nil)
и мне интересно, в чем его цель. Кажется, он ничего не инициализирует, и поскольку он использует пустой идентификатор, я думаю, вы не можете получить к нему доступ.
Это утверждение времени компиляции, что *Doubler
Тип *Doubler
удовлетворяет интерфейсу PropertyLoadSaver
.
Если тип *Doubler
Doubler не удовлетворяет интерфейсу, то компиляция завершится с ошибкой, аналогичной:
prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment: *Doubler does not implement PropertyLoadSaver (missing Save method)
Вот как это работает. Код var _ PropertyLoadSaver
объявляет неназванную переменную типа PropertyLoadSaver
. Выражение (*Doubler)(nil)
оценивается значением типа *Doubler
. *Doubler
может быть назначен только переменной типа ProperytLoadSaver
если *Doubler
реализует интерфейс PropertyLoadSaver
.
Пустой идентификатор _
используется, поскольку переменная не нуждается в ссылке в другом месте в пакете. Тот же результат может быть достигнут с помощью непустого идентификатора:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)