package main import ( "errors" "fmt" ) var ( ErrHourlyRate = errors.New("invalid hourly rate") ErrHoursWorked = errors.New("invalid hours worked per week") ) func main() { pay := payDay(100, 25) fmt.Println(pay) pay = payDay(100, 200) fmt.Println(pay) pay = payDay(60, 25) fmt.Println(pay) } func payDay(hoursWorked, hourlyRate int) int { defer func() { if r := recover(); r != nil { if r == ErrHourlyRate { fmt.Printf("hourly rate: %d -> err: %v\n\n", hourlyRate, r) } if r == ErrHoursWorked { fmt.Printf("hours worked: %d -> err: %v\n\n", hoursWorked, r) } } fmt.Printf("Pay was calculated based on:\nhours worked: %d\nhourly rate: %d\n", hoursWorked, hourlyRate) }() if hourlyRate < 10 || hourlyRate > 75 { panic(ErrHourlyRate) } if hoursWorked < 0 || hoursWorked > 80 { panic(ErrHoursWorked) } if hoursWorked > 40 { hoursOver := hoursWorked - 40 overTime := hoursOver * 2 regularPay := 40 * hourlyRate return regularPay + overTime } return hoursWorked * hourlyRate }