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

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
}