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.

116 lines
2.0 KiB

  1. package main
  2. import "fmt"
  3. type Employee struct {
  4. Id int
  5. FirstName string
  6. LastName string
  7. }
  8. type Developer struct {
  9. Individual Employee
  10. HourlyRate int
  11. WorkWeek [7]int
  12. }
  13. type Weekday int
  14. const (
  15. Sunday Weekday = iota
  16. Monday
  17. Tuesday
  18. Wednesday
  19. Thursday
  20. Friday
  21. Saturday
  22. )
  23. func main() {
  24. d := Developer{Individual: Employee{Id: 1, FirstName: "Tony", LastName: "Stark"}, HourlyRate: 10}
  25. x := nonLoggedHours()
  26. fmt.Println("Tracking hours worked so far today:", x(2))
  27. fmt.Println("Tracking hours worked so far today:", x(3))
  28. fmt.Println("Tracking hours worked so far today:", x(5))
  29. d.LogHours(Monday, 8)
  30. d.LogHours(Tuesday, 10)
  31. d.LogHours(Wednesday, 10)
  32. d.LogHours(Thursday, 10)
  33. d.LogHours(Friday, 6)
  34. d.LogHours(Saturday, 8)
  35. d.PayDetails()
  36. }
  37. func (d *Developer) LogHours(day Weekday, hours int) {
  38. d.WorkWeek[day] = hours
  39. }
  40. func (d *Developer) HoursWorked() int {
  41. total := 0
  42. for _, v := range d.WorkWeek {
  43. total += v
  44. }
  45. return total
  46. }
  47. func (d *Developer) PayDay() (int, bool) {
  48. if d.HoursWorked() > 40 {
  49. hoursOver := d.HoursWorked() - 40
  50. overTime := hoursOver * 2 * d.HourlyRate
  51. regularPay := 40 * d.HourlyRate
  52. return regularPay + overTime, true
  53. }
  54. return d.HoursWorked() * d.HourlyRate, false
  55. }
  56. func nonLoggedHours() func(int) int {
  57. total := 0
  58. return func(i int) int {
  59. total += i
  60. return total
  61. }
  62. }
  63. func (d *Developer) PayDetails() {
  64. for i, v := range d.WorkWeek {
  65. switch i {
  66. case 0:
  67. fmt.Println("Sunday hours:", v)
  68. case 1:
  69. fmt.Println("Monday hours:", v)
  70. case 2:
  71. fmt.Println("Tuesday hours:", v)
  72. case 3:
  73. fmt.Println("Wednesday hours:", v)
  74. case 4:
  75. fmt.Println("Thursday hours:", v)
  76. case 5:
  77. fmt.Println("Friday hours:", v)
  78. case 6:
  79. fmt.Println("Saturday hours:", v)
  80. }
  81. }
  82. fmt.Println("Hours worked this week:", d.HoursWorked())
  83. pay, over := d.PayDay()
  84. fmt.Println("Pay for the week:", pay)
  85. fmt.Println("Is this overtime pay:", over)
  86. }