package main import ( "fmt" ) // ------------------------ type Payer interface { Pay(int) error } type Ringer interface { Ring(string) error } type NFCPhone interface { Payer Ringer } type Phone struct { Money int } func (p *Phone) Pay(amount int) error { if p.Money < amount { return fmt.Errorf("Не хватает денег на телефоне") } p.Money -= amount return nil } func (p *Phone) Ring(number string) error { if number == "" { return fmt.Errorf("Please, enter phone") } return nil } func PayForMetWithPhone(phone NFCPhone) { err := phone.Pay(1) if err != nil { fmt.Printf("Ошибка при оплате %v\n\n", err) return } fmt.Printf("Турникет открыт через %T\n\n", phone) } // ------------------------ func main() { myPhone := &Phone{Money: 9} PayForMetWithPhone(myPhone) }