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