Go: проверка соответствию интерфейсу

Предположим у есть некие интерфейсы. И мы хотим в момент компиляции гарантировать, что мы им удовлетворяем. Это может быть полезно, если пишем реализацию для интерфейсов стороннего пакета (внутри проекта или за его пределами).

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