123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package main
- import (
- "fmt"
- )
- // --------------
- type Wallet struct {
- Cash int
- }
- func (w *Wallet) Pay(amount int) error {
- if w.Cash < amount {
- return fmt.Errorf("Не хватает денег в кошельке")
- }
- w.Cash -= amount
- return nil
- }
- // --------------
- type Card struct {
- Balance int
- ValidUntil string
- Cardholder string
- CVV string
- Number string
- }
- func (c *Card) Pay(amount int) error {
- if c.Balance < amount {
- return fmt.Errorf("Не хватает денег на карте")
- }
- c.Balance -= amount
- return nil
- }
- // --------------
- type ApplePay struct {
- Money int
- AppleID string
- }
- func (a *ApplePay) Pay(amount int) error {
- if a.Money < amount {
- return fmt.Errorf("Не хватает денег на аккаунте")
- }
- a.Money -= amount
- return nil
- }
- // --------------
- type Payer interface {
- Pay(int) error
- }
- // --------------
- func Buy(p Payer) {
- err := p.Pay(10)
- if err != nil {
- fmt.Printf("Ошибка при оплате %T: %v\n\n", p, err)
- return
- }
- fmt.Printf("Спасибо за покупку через %T\n\n", p)
- }
- // --------------
- func main() {
- myWallet := &Wallet{Cash: 100}
- Buy(myWallet)
- var myMoney Payer
- myMoney = &Card{Balance: 100, Cardholder: "rvasily"}
- Buy(myMoney)
- myMoney = &ApplePay{Money: 9}
- Buy(myMoney)
- }
|