Exercises & activities from the go workshop provided by Packt: https://courses.packtpub.com/courses/go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.3 KiB

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "strings"
  6. )
  7. type directDeposit struct {
  8. lastName string
  9. firstName string
  10. bankName string
  11. routingNumber int
  12. accountNumber int
  13. }
  14. var (
  15. ErrInvalidLastName = errors.New("invalid last name")
  16. ErrInvalidRoutingNumber = errors.New("invalid routing number")
  17. )
  18. func (d *directDeposit) validateRoutingNumber() error {
  19. defer func() {
  20. if err := recover(); err == ErrInvalidRoutingNumber {
  21. fmt.Println(err)
  22. }
  23. }()
  24. if d.routingNumber < 100 {
  25. panic(ErrInvalidRoutingNumber)
  26. }
  27. return nil
  28. }
  29. func (d *directDeposit) validateLastName() error {
  30. d.lastName = strings.TrimSpace(d.lastName)
  31. if len(d.lastName) == 0 {
  32. return ErrInvalidLastName
  33. }
  34. return nil
  35. }
  36. func (d *directDeposit) report() {
  37. fmt.Println(strings.Repeat("*", 40))
  38. fmt.Println("Last Name: ", d.lastName)
  39. fmt.Println("First Name: ", d.firstName)
  40. fmt.Println("Bank Name: ", d.bankName)
  41. fmt.Println("Routing Number:", d.routingNumber)
  42. fmt.Println("Account Number:", d.accountNumber)
  43. }
  44. func main() {
  45. dp := directDeposit{
  46. "",
  47. "Abe",
  48. "XYZ Inc",
  49. 17,
  50. 1809,
  51. }
  52. _ = dp.validateRoutingNumber()
  53. if err := dp.validateLastName(); err != nil {
  54. fmt.Println(err)
  55. }
  56. dp.report()
  57. }