Предположим у есть некие интерфейсы. И мы хотим в момент компиляции гарантировать, что мы им удовлетворяем. Это может быть полезно, если пишем реализацию для интерфейсов стороннего пакета (внутри проекта или за его пределами).
package store
type UserCreator interface {
CreateUser(user User) error
}
type UserModifier interface {
ModifyUser(userID string, updatedUser User) error
}
type UserBlocker interface {
BlockUser(userID string, block bool) error
}
Тогда проверку мы реализуем вот так:
package pgstore
var (
// compile time checks for interface implementation
_ store.UserCreator = (*PgStorage)(nil)
_ store.UserModifier = (*PgStorage)(nil)
_ store.UserBlocker = (*PgStorage)(nil)
)
type PgStorage struct { ... }