Есть проблемы с пониманием части кода Голанга
package main
type Writeable interface {
OnWrite() interface{}
}
type Result struct {
Message string
}
func (r *Result) OnWrite() interface{} {
return r.Message
}
// what does this line mean? what is the purpose?
var _ Writeable = (*Result)(nil)
func main() {
}
Комментарии в фрагменте кода выразили мое замешательство. Как я понял, строка с комментарием уведомляет компилятор, чтобы проверить, реализовала ли структура интерфейс, но я не очень уверен. Может ли кто-нибудь помочь объяснить цель?
1 ответ
Как вы говорите, это способ проверить, что Result
инвентарь Writeable
, Из GO FAQ:
Вы можете попросить компилятор проверить, что тип T реализует интерфейс I, пытаясь присвоить:
type T struct{} var _ I = T{} // Verify that T implements I.
Пустой идентификатор _ обозначает имя переменной, которая здесь не нужна (и, таким образом, предотвращает ошибку "объявлена, но не используется").
(*Result)(nil)
создает неинициализированный указатель на значение типа Result
путем преобразования nil
в *Result
, Это позволяет избежать выделения памяти для пустой структуры, как вы получите с new(Result)
или же &Result{}
,