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

• обновлено • 1 мин чтения

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

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

Об авторе: Александр Бруяко — руководитель разработки с опытом в backend, инфраструктуре и управлении командами.


Теги: