package
0.0.0-20241220153043-cbee1828b161
Repository: https://github.com/alivewel/go.git
Documentation: pkg.go.dev
# README
Что такое интерфейсы в го?
Интерфейсы — (контракт) это инструменты для определения наборов действий и поведения. Они позволяют объектам опираться на абстракции, а не фактические реализации других объектов.
В структуре itab хранится тип интерфейса и методы, которые должна описывать структура, чтобы реализовывать интерфейс:
type iface struct {
tab *itab // это указатель на Interface Table или itable - структуру, которая хранит список методов, используемых для удовлетворения интерфейса.
data unsafe.Pointer // указатель на тип данных
}
Интерфейсы широко используются при тестировании.
Где необходимо объявлять интерфейс? Там где мы его используем? Или там где мы его реализуем?
Интерфейсы:
- Описываются там, где используется.
- Должны содержать только то, что используется
Что выведет программа?
func main() {
var ptr *struct{}
var iface interface{}
iface = ptr
if iface == nil {
println("It's nil!")
}
}
Ничего не распечается потому что interface != nil
, в нем хранится информация о типе данных (struct{}
- пустая структура).
Если убрать присвоение iface = ptr
, то интерфейс станет равным nil
.