| @ -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 | |||||
| } | |||||