РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
468 of 1593 menu
◀ ▶

Объявление интерфейса interface

Объявление интерфейса в Go задает контракт, который определяет набор методов. Тип реализует интерфейс, если он реализует все методы, объявленные в интерфейсе. В первом параметре указывается имя интерфейса, а в теле перечисляются сигнатуры методов без ключевого слова func и без тела.

Синтаксис

type InterfaceName interface { Method1(param1 Type1) ReturnType1 Method2(param2 Type2) ReturnType2 }

Пример

Давайте объявим интерфейс Stringer с одним методом String() string:

package main import "fmt" type Stringer interface { String() string } type Book struct { Title string Author string } func (b Book) String() string { return b.Title + " by " + b.Author } func main() { b := Book{"The Go Programming Language", "Donovan & Kernighan"} fmt.Println(b.String()) }

Результат выполнения кода:

"The Go Programming Language by Donovan & Kernighan"

Пример

Давайте объявим интерфейс Processor с двумя методами Process() int и Reset():

package main import "fmt" type Processor interface { Process(data int) int Reset() } type Multiplier struct { factor int } func (m *Multiplier) Process(data int) int { return data * m.factor } func (m *Multiplier) Reset() { m.factor = 1 } func main() { var p Processor = &Multiplier{factor: 5} res := p.Process(10) fmt.Println(res) p.Reset() res = p.Process(10) fmt.Println(res) }

Результат выполнения кода:

50 10

Пример

Давайте объявим интерфейс Checker с методом Check() bool и используем его для проверки чисел:

package main import "fmt" type Checker interface { Check() bool } type EvenNumber struct { Value int } func (e EvenNumber) Check() bool { return e.Value%2 == 0 } type PositiveNumber struct { Value int } func (p PositiveNumber) Check() bool { return p.Value > 0 } func main() { checkers := []Checker{EvenNumber{4}, PositiveNumber{-3}} for _, checker := range checkers { fmt.Println(checker.Check()) } }

Результат выполнения кода:

true false

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить