embed_interface.go 859 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. // ------------------------
  6. type Payer interface {
  7. Pay(int) error
  8. }
  9. type Ringer interface {
  10. Ring(string) error
  11. }
  12. type NFCPhone interface {
  13. Payer
  14. Ringer
  15. }
  16. type Phone struct {
  17. Money int
  18. }
  19. func (p *Phone) Pay(amount int) error {
  20. if p.Money < amount {
  21. return fmt.Errorf("Не хватает денег на телефоне")
  22. }
  23. p.Money -= amount
  24. return nil
  25. }
  26. func (p *Phone) Ring(number string) error {
  27. if number == "" {
  28. return fmt.Errorf("Please, enter phone")
  29. }
  30. return nil
  31. }
  32. func PayForMetWithPhone(phone NFCPhone) {
  33. err := phone.Pay(1)
  34. if err != nil {
  35. fmt.Printf("Ошибка при оплате %v\n\n", err)
  36. return
  37. }
  38. fmt.Printf("Турникет открыт через %T\n\n", phone)
  39. }
  40. // ------------------------
  41. func main() {
  42. myPhone := &Phone{Money: 9}
  43. PayForMetWithPhone(myPhone)
  44. }