package main import ( "errors" "fmt" "strings" ) type directDeposit struct { lastName string firstName string bankName string routingNumber int accountNumber int } var ( ErrInvalidLastName = errors.New("invalid last name") ErrInvalidRoutingNumber = errors.New("invalid routing number") ) func (d *directDeposit) validateRoutingNumber() error { defer func() { if err := recover(); err == ErrInvalidRoutingNumber { fmt.Println(err) } }() if d.routingNumber < 100 { panic(ErrInvalidRoutingNumber) } return nil } func (d *directDeposit) validateLastName() error { d.lastName = strings.TrimSpace(d.lastName) if len(d.lastName) == 0 { return ErrInvalidLastName } return nil } func (d *directDeposit) report() { fmt.Println(strings.Repeat("*", 40)) fmt.Println("Last Name: ", d.lastName) fmt.Println("First Name: ", d.firstName) fmt.Println("Bank Name: ", d.bankName) fmt.Println("Routing Number:", d.routingNumber) fmt.Println("Account Number:", d.accountNumber) } func main() { dp := directDeposit{ "", "Abe", "XYZ Inc", 17, 1809, } _ = dp.validateRoutingNumber() if err := dp.validateLastName(); err != nil { fmt.Println(err) } dp.report() }