52 lines
883 B
Go
52 lines
883 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
type error interface {
|
|
Error() string
|
|
}
|
|
|
|
type DivisionError struct {
|
|
errMessage string
|
|
firstArgument int
|
|
secondArgument int
|
|
}
|
|
|
|
func NewDivisionError(message string, lhs, rhs int) DivisionError {
|
|
return DivisionError{
|
|
errMessage: message,
|
|
firstArgument: lhs,
|
|
secondArgument: rhs,
|
|
}
|
|
}
|
|
|
|
func (e DivisionError) Error() string {
|
|
if e.errMessage != "" {
|
|
return e.errMessage + " [" + strconv.Itoa(e.firstArgument) + ", " + strconv.Itoa(e.secondArgument) + "]"
|
|
} else {
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func divide(lhs, rhs int) (int, error) {
|
|
if rhs == 0 {
|
|
return 0, NewDivisionError("zero number", lhs, rhs)
|
|
} else if lhs%2 == 0 || rhs%2 == 0 {
|
|
return 0, NewDivisionError("even number", lhs, rhs)
|
|
}
|
|
|
|
return lhs / rhs, nil
|
|
}
|
|
|
|
func main() {
|
|
x := 100
|
|
y := 0
|
|
|
|
value, err := divide(x, y)
|
|
fmt.Println(value)
|
|
fmt.Println(err)
|
|
}
|