@ -0,0 +1,18 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
) | |||||
var ( | |||||
ErrInvalidLastName = errors.New("invalid last name") | |||||
ErrInvalidRoutingNumber = errors.New("invalid routing number") | |||||
) | |||||
func main() { | |||||
fmt.Println(ErrInvalidLastName) | |||||
fmt.Println(ErrInvalidRoutingNumber) | |||||
} |
@ -0,0 +1,70 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
"strings" | |||||
) | |||||
type directDeposit struct { | |||||
lastName string | |||||
firstName string | |||||
bankName string | |||||
routingNumber int | |||||
accountNumber int | |||||
} | |||||
var ( | |||||
ErrInvalidLastName = errors.New("invalid last name") | |||||
ErrInvalidRoutingNumber = errors.New("invalid routing number") | |||||
) | |||||
func (d *directDeposit) validateRoutingNumber() error { | |||||
if d.routingNumber < 100 { | |||||
return ErrInvalidRoutingNumber | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) validateLastName() error { | |||||
d.lastName = strings.TrimSpace(d.lastName) | |||||
if len(d.lastName) == 0 { | |||||
return ErrInvalidLastName | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) report() { | |||||
fmt.Println(strings.Repeat("*", 40)) | |||||
fmt.Println("Last Name: ", d.lastName) | |||||
fmt.Println("First Name: ", d.firstName) | |||||
fmt.Println("Bank Name: ", d.bankName) | |||||
fmt.Println("Routing Number:", d.routingNumber) | |||||
fmt.Println("Account Number:", d.accountNumber) | |||||
} | |||||
func main() { | |||||
dp := directDeposit{ | |||||
"", | |||||
"Abe", | |||||
"XYZ Inc", | |||||
17, | |||||
1809, | |||||
} | |||||
if err := dp.validateRoutingNumber(); err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
if err := dp.validateLastName(); err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
dp.report() | |||||
} |
@ -0,0 +1,68 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
"strings" | |||||
) | |||||
type directDeposit struct { | |||||
lastName string | |||||
firstName string | |||||
bankName string | |||||
routingNumber int | |||||
accountNumber int | |||||
} | |||||
var ( | |||||
ErrInvalidLastName = errors.New("invalid last name") | |||||
ErrInvalidRoutingNumber = errors.New("invalid routing number") | |||||
) | |||||
func (d *directDeposit) validateRoutingNumber() error { | |||||
if d.routingNumber < 100 { | |||||
panic(ErrInvalidRoutingNumber) | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) validateLastName() error { | |||||
d.lastName = strings.TrimSpace(d.lastName) | |||||
if len(d.lastName) == 0 { | |||||
return ErrInvalidLastName | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) report() { | |||||
fmt.Println(strings.Repeat("*", 40)) | |||||
fmt.Println("Last Name: ", d.lastName) | |||||
fmt.Println("First Name: ", d.firstName) | |||||
fmt.Println("Bank Name: ", d.bankName) | |||||
fmt.Println("Routing Number:", d.routingNumber) | |||||
fmt.Println("Account Number:", d.accountNumber) | |||||
} | |||||
func main() { | |||||
dp := directDeposit{ | |||||
"", | |||||
"Abe", | |||||
"XYZ Inc", | |||||
17, | |||||
1809, | |||||
} | |||||
_ = dp.validateRoutingNumber() | |||||
if err := dp.validateLastName(); err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
dp.report() | |||||
} |
@ -0,0 +1,74 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
"strings" | |||||
) | |||||
type directDeposit struct { | |||||
lastName string | |||||
firstName string | |||||
bankName string | |||||
routingNumber int | |||||
accountNumber int | |||||
} | |||||
var ( | |||||
ErrInvalidLastName = errors.New("invalid last name") | |||||
ErrInvalidRoutingNumber = errors.New("invalid routing number") | |||||
) | |||||
func (d *directDeposit) validateRoutingNumber() error { | |||||
defer func() { | |||||
if err := recover(); err == ErrInvalidRoutingNumber { | |||||
fmt.Println(err) | |||||
} | |||||
}() | |||||
if d.routingNumber < 100 { | |||||
panic(ErrInvalidRoutingNumber) | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) validateLastName() error { | |||||
d.lastName = strings.TrimSpace(d.lastName) | |||||
if len(d.lastName) == 0 { | |||||
return ErrInvalidLastName | |||||
} | |||||
return nil | |||||
} | |||||
func (d *directDeposit) report() { | |||||
fmt.Println(strings.Repeat("*", 40)) | |||||
fmt.Println("Last Name: ", d.lastName) | |||||
fmt.Println("First Name: ", d.firstName) | |||||
fmt.Println("Bank Name: ", d.bankName) | |||||
fmt.Println("Routing Number:", d.routingNumber) | |||||
fmt.Println("Account Number:", d.accountNumber) | |||||
} | |||||
func main() { | |||||
dp := directDeposit{ | |||||
"", | |||||
"Abe", | |||||
"XYZ Inc", | |||||
17, | |||||
1809, | |||||
} | |||||
_ = dp.validateRoutingNumber() | |||||
if err := dp.validateLastName(); err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
dp.report() | |||||
} |
@ -0,0 +1,28 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
) | |||||
func main() { | |||||
test() | |||||
fmt.Println("This line will not get printed") | |||||
} | |||||
func test() { | |||||
n := func() { | |||||
fmt.Println("Defer in test") | |||||
} | |||||
defer n() | |||||
msg := "good-bye" | |||||
message(msg) | |||||
} | |||||
func message(msg string) { | |||||
f := func() { | |||||
fmt.Println("Defer in message func") | |||||
} | |||||
defer f() | |||||
if msg == "good-bye" { | |||||
panic(errors.New("something went wrong")) | |||||
} | |||||
} |
@ -0,0 +1,26 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
) | |||||
func main() { | |||||
a() | |||||
fmt.Println("This line will now get printed from main() function") | |||||
} | |||||
func a() { | |||||
b("good-bye") | |||||
fmt.Println("Back in function a()") | |||||
} | |||||
func b(msg string) { | |||||
defer func() { | |||||
if r := recover(); r != nil { | |||||
fmt.Println("error in func b()", r) | |||||
} | |||||
}() | |||||
if msg == "good-bye" { | |||||
panic(errors.New("something went wrong")) | |||||
} | |||||
fmt.Print(msg) | |||||
} |
@ -0,0 +1,17 @@ | |||||
package main | |||||
import "fmt" | |||||
func main() { | |||||
nums := []int{2, 4, 6, 8} | |||||
total := 0 | |||||
// for i := 0; i <= 10; i++ { | |||||
for num, _ := range nums { | |||||
total += num | |||||
} | |||||
fmt.Println("Total:", total) | |||||
} |
@ -0,0 +1,16 @@ | |||||
package main | |||||
import "fmt" | |||||
func main() { | |||||
km := 2 | |||||
// if km > 2 { | |||||
if km >= 2 { | |||||
fmt.Println("Take the car") | |||||
} else { | |||||
fmt.Println("Going to walk today") | |||||
} | |||||
} |
@ -0,0 +1,52 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
) | |||||
var ( | |||||
ErrHourlyRate = errors.New("invalid hourly rate") | |||||
ErrHoursWorked = errors.New("invalid hours worked per week") | |||||
) | |||||
func main() { | |||||
pay, err := payDay(81, 50) | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
pay, err = payDay(80, 5) | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
pay, err = payDay(80, 50) | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
} | |||||
fmt.Println(pay) | |||||
} | |||||
func payDay(hoursWorked, hourlyRate int) (int, error) { | |||||
if hourlyRate < 10 || hourlyRate > 75 { | |||||
return 0, ErrHourlyRate | |||||
} | |||||
if hoursWorked < 0 || hoursWorked > 80 { | |||||
return 0, ErrHoursWorked | |||||
} | |||||
if hoursWorked > 40 { | |||||
hoursOver := hoursWorked - 40 | |||||
overTime := hoursOver * 2 | |||||
regularPay := 40 * hourlyRate | |||||
return regularPay + overTime, nil | |||||
} | |||||
return hoursWorked * hourlyRate, nil | |||||
} |
@ -0,0 +1,43 @@ | |||||
package main | |||||
import ( | |||||
"errors" | |||||
"fmt" | |||||
) | |||||
var ( | |||||
ErrHourlyRate = errors.New("invalid hourly rate") | |||||
ErrHoursWorked = errors.New("invalid hours worked per week") | |||||
) | |||||
func main() { | |||||
pay := payDay(81, 50) | |||||
fmt.Println(pay) | |||||
} | |||||
func payDay(hoursWorked, hourlyRate int) int { | |||||
report := func() { | |||||
fmt.Printf("hoursWorked: %d\nhourlyRate: %d\n", hoursWorked, hourlyRate) | |||||
} | |||||
defer report() | |||||
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 | |||||
} |
@ -0,0 +1,55 @@ | |||||
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 | |||||
} |