Advertisement
AlexNovoross87

vstraivanie_types

May 14th, 2025
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.23 KB | None | 0 0
  1. Встраивание типов
  2.  Встраивание типов - это способ легко:
  3. a) Предоставить существующую функциональность новому типу
  4. б) Требовать, чтобы тип реализовывал несколько интерфейсов
  5.  
  6. Вложенные интерфейсы
  7. ---------------------
  8. ->Вложенные интерфейсы позволяют вам «встраивать» один интерфейс в другой интерфейс.
  9.  *Реализация интерфейса требует реализации всех встроенных функций.
  10.  *Позволяет избежать дублирования объявлений интерфейсов и
  11.   минимизирует необходимость написания повторяющихся объявлений
  12. -> Изменения во встроенных интерфейсах автоматически распространяются
  13.    *Облегчается поддержка кодовой базы (ошибки компилятора указывают на то,
  14.    где необходимы обновления)
  15.  
  16.    Обьявляем интерфейсы:
  17.    type Whisperer interface{ Whisper() string }
  18.    type Yeller interface{ Yell() string }
  19.  
  20. Встраиваем интерфейсы в один интерфейс
  21. type Talker interface {
  22.     Whisperer
  23.     Yeller
  24. }
  25.  
  26. Создаем структуру и реализовываем интерфейс:
  27. type Waaaa struct {
  28. }
  29. func (w *Waaaa) Whisper() string {
  30.     return "WHHHHHH"
  31. }
  32. func (w *Waaaa) Yell() string {
  33.     return "YELL"
  34. }
  35.  
  36. //Функция, принимающая интерфейс
  37. func Do(obj Talker) {
  38.     fmt.Println(obj.Whisper())
  39.     fmt.Println(obj.Yell())
  40. }
  41.  
  42. func trt() {
  43.     var i Waaaa
  44.     Do(&i)
  45. }
  46.  
  47. ===================================================
  48. ->Вложенные структуры
  49.   *Встроенные структуры (embedded structs) позволяют "встраивать"
  50.    одну структуру внутрь другой структуры
  51.    Структура будет иметь доступ к всем методам-получателям и
  52.    данным встроенной структуры на верхнем уровне
  53.    Это называется продвижением полей и методов (field & method promotion)
  54.    Он обеспечивает удобный доступ к данным встроенной структуры
  55.    без дополнительной косвенности
  56.  
  57.    type Account struct {
  58.     accountId int
  59.     balance   int
  60.     name      string
  61. }
  62.  
  63. func (a *Account) String() string {
  64.     return "AccountStr"
  65. }
  66. func (a *Account) GetBallance() int {
  67.     return a.balance
  68. }
  69.  
  70. type ManagerAccount struct{ Account }
  71.  
  72. //Поведет себя как override в с++, но можно
  73. //получить функцию базового класса
  74. func (m ManagerAccount) String() string {
  75.     return "MANAGE ACCOUNTER"
  76. }
  77.  
  78. func Dostruct() {
  79.     mgrAcct := ManagerAccount{Account{-2, 30, "Cassandra"}}
  80.     fmt.Println(mgrAcct)
  81.     fmt.Println(mgrAcct.GetBallance())
  82.     fmt.Println(mgrAcct.String())
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement