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.

55 lines
1.1 KiB

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. )
  6. var (
  7. ErrHourlyRate = errors.New("invalid hourly rate")
  8. ErrHoursWorked = errors.New("invalid hours worked per week")
  9. )
  10. func main() {
  11. pay := payDay(100, 25)
  12. fmt.Println(pay)
  13. pay = payDay(100, 200)
  14. fmt.Println(pay)
  15. pay = payDay(60, 25)
  16. fmt.Println(pay)
  17. }
  18. func payDay(hoursWorked, hourlyRate int) int {
  19. defer func() {
  20. if r := recover(); r != nil {
  21. if r == ErrHourlyRate {
  22. fmt.Printf("hourly rate: %d -> err: %v\n\n", hourlyRate, r)
  23. }
  24. if r == ErrHoursWorked {
  25. fmt.Printf("hours worked: %d -> err: %v\n\n", hoursWorked, r)
  26. }
  27. }
  28. fmt.Printf("Pay was calculated based on:\nhours worked: %d\nhourly rate: %d\n",
  29. hoursWorked, hourlyRate)
  30. }()
  31. if hourlyRate < 10 || hourlyRate > 75 {
  32. panic(ErrHourlyRate)
  33. }
  34. if hoursWorked < 0 || hoursWorked > 80 {
  35. panic(ErrHoursWorked)
  36. }
  37. if hoursWorked > 40 {
  38. hoursOver := hoursWorked - 40
  39. overTime := hoursOver * 2
  40. regularPay := 40 * hourlyRate
  41. return regularPay + overTime
  42. }
  43. return hoursWorked * hourlyRate
  44. }