basic.go 490 B

12345678910111213141516171819202122232425262728293031323334
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type Payer interface {
  6. Pay(int) error
  7. }
  8. type Wallet struct {
  9. Cash int
  10. }
  11. func (w *Wallet) Pay(amount int) error {
  12. if w.Cash < amount {
  13. return fmt.Errorf("Не хватает денег в кошельке")
  14. }
  15. w.Cash -= amount
  16. return nil
  17. }
  18. func Buy(p Payer) {
  19. err := p.Pay(10)
  20. if err != nil {
  21. panic(err)
  22. }
  23. fmt.Printf("Спасибо за покупку через %T\n\n", p)
  24. }
  25. func main() {
  26. myWallet := &Wallet{Cash: 100}
  27. Buy(myWallet)
  28. }