Есть проблемы с пониманием части кода Голанга

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{},

Другие вопросы по тегам