| @ -0,0 +1,116 @@ | |||
| package main | |||
| import "fmt" | |||
| type Employee struct { | |||
| Id int | |||
| FirstName string | |||
| LastName string | |||
| } | |||
| type Developer struct { | |||
| Individual Employee | |||
| HourlyRate int | |||
| WorkWeek [7]int | |||
| } | |||
| type Weekday int | |||
| const ( | |||
| Sunday Weekday = iota | |||
| Monday | |||
| Tuesday | |||
| Wednesday | |||
| Thursday | |||
| Friday | |||
| Saturday | |||
| ) | |||
| func main() { | |||
| d := Developer{Individual: Employee{Id: 1, FirstName: "Tony", LastName: "Stark"}, HourlyRate: 10} | |||
| x := nonLoggedHours() | |||
| fmt.Println("Tracking hours worked so far today:", x(2)) | |||
| fmt.Println("Tracking hours worked so far today:", x(3)) | |||
| fmt.Println("Tracking hours worked so far today:", x(5)) | |||
| d.LogHours(Monday, 8) | |||
| d.LogHours(Tuesday, 10) | |||
| d.LogHours(Wednesday, 10) | |||
| d.LogHours(Thursday, 10) | |||
| d.LogHours(Friday, 6) | |||
| d.LogHours(Saturday, 8) | |||
| d.PayDetails() | |||
| } | |||
| func (d *Developer) LogHours(day Weekday, hours int) { | |||
| d.WorkWeek[day] = hours | |||
| } | |||
| func (d *Developer) HoursWorked() int { | |||
| total := 0 | |||
| for _, v := range d.WorkWeek { | |||
| total += v | |||
| } | |||
| return total | |||
| } | |||
| func (d *Developer) PayDay() (int, bool) { | |||
| if d.HoursWorked() > 40 { | |||
| hoursOver := d.HoursWorked() - 40 | |||
| overTime := hoursOver * 2 * d.HourlyRate | |||
| regularPay := 40 * d.HourlyRate | |||
| return regularPay + overTime, true | |||
| } | |||
| return d.HoursWorked() * d.HourlyRate, false | |||
| } | |||
| func nonLoggedHours() func(int) int { | |||
| total := 0 | |||
| return func(i int) int { | |||
| total += i | |||
| return total | |||
| } | |||
| } | |||
| func (d *Developer) PayDetails() { | |||
| for i, v := range d.WorkWeek { | |||
| switch i { | |||
| case 0: | |||
| fmt.Println("Sunday hours:", v) | |||
| case 1: | |||
| fmt.Println("Monday hours:", v) | |||
| case 2: | |||
| fmt.Println("Tuesday hours:", v) | |||
| case 3: | |||
| fmt.Println("Wednesday hours:", v) | |||
| case 4: | |||
| fmt.Println("Thursday hours:", v) | |||
| case 5: | |||
| fmt.Println("Friday hours:", v) | |||
| case 6: | |||
| fmt.Println("Saturday hours:", v) | |||
| } | |||
| } | |||
| fmt.Println("Hours worked this week:", d.HoursWorked()) | |||
| pay, over := d.PayDay() | |||
| fmt.Println("Pay for the week:", pay) | |||
| fmt.Println("Is this overtime pay:", over) | |||
| } | |||
| @ -0,0 +1,40 @@ | |||
| package main | |||
| import ( | |||
| "fmt" | |||
| "strings" | |||
| ) | |||
| func main() { | |||
| hdr := []string{"empid", "employee", "address", "hours worked", | |||
| "hourly rate", "manager"} | |||
| result := csvHdrCol(hdr) | |||
| fmt.Println("Result:") | |||
| fmt.Println(result) | |||
| fmt.Println() | |||
| hdr2 := []string{"employee", "empid", "hours worked", "address", | |||
| "manager", "hourly rate"} | |||
| result2 := csvHdrCol(hdr2) | |||
| fmt.Println("Result2:") | |||
| fmt.Println(result2) | |||
| fmt.Println() | |||
| } | |||
| func csvHdrCol(hdr []string) map[int]string { | |||
| csvIdxToCol := make(map[int]string) | |||
| for i, v := range hdr { | |||
| v = strings.TrimSpace(v) | |||
| switch strings.ToLower(v) { | |||
| case "employee", "hours worked", "hourly rate": | |||
| csvIdxToCol[i] = v | |||
| } | |||
| } | |||
| return csvIdxToCol | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package main | |||
| import "fmt" | |||
| func main() { | |||
| i := []int{5, 10, 15} | |||
| fmt.Println(sum(5, 4)) | |||
| fmt.Println(sum(i...)) | |||
| } | |||
| func sum(nums ...int) int { | |||
| total := 0 | |||
| for _, num := range nums { | |||
| total += num | |||
| } | |||
| return total | |||
| } | |||
| @ -0,0 +1,16 @@ | |||
| package main | |||
| import "fmt" | |||
| func main() { | |||
| j := 9 | |||
| x := func(i int) int { | |||
| return i * i | |||
| } | |||
| fmt.Printf("The square of %d is %d\n", j, x(j)) | |||
| fmt.Printf("The square of %d is %d\n", j, func(i int) int { return i * i }(j)) | |||
| } | |||
| @ -0,0 +1,26 @@ | |||
| package main | |||
| import "fmt" | |||
| func main() { | |||
| counter := 4 | |||
| x := decrement(counter) | |||
| fmt.Println(x()) | |||
| fmt.Println(x()) | |||
| fmt.Println(x()) | |||
| fmt.Println(x()) | |||
| fmt.Println("counter:", counter) | |||
| } | |||
| func decrement(i int) func() int { | |||
| return func() int { | |||
| i-- | |||
| return i | |||
| } | |||
| } | |||
| @ -0,0 +1,32 @@ | |||
| package main | |||
| import "fmt" | |||
| func main() { | |||
| devSalary := salary(50, 2080, developerSalary) | |||
| bossSalary := salary(150000, 25000, managerSalary) | |||
| fmt.Printf("Boss salary: %d\n", bossSalary) | |||
| fmt.Printf("Developer salary: %d\n", devSalary) | |||
| } | |||
| func salary(x, y int, f func(int, int) int) int { | |||
| pay := f(x, y) | |||
| return pay | |||
| } | |||
| func developerSalary(hourlyRate, hoursWorked int) int { | |||
| return hourlyRate * hoursWorked | |||
| } | |||
| func managerSalary(baseSalary, bonus int) int { | |||
| return baseSalary + bonus | |||
| } | |||