-
Notifications
You must be signed in to change notification settings - Fork 0
/
21-erros.go
56 lines (45 loc) · 967 Bytes
/
21-erros.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package main
import (
"errors"
"fmt"
)
func f1(arg int) (int, error){
if arg == 42{
return -1, errors.New("can't work with 42")
}
return arg + 3, nil
}
type argError struct{
arg int
prob string
}
func (e *argError) Error() string{
return fmt.Sprintf("%d - %s", e.arg, e.prob)
}
func f2(arg int)(int,error){
if arg == 42{
return -1, &argError{arg, "can't work with it"}
}
return arg + 3, nil
}
func main(){
for _,i := range []int{7,42}{
if r,e := f1(i); e!=nil{
fmt.Println("f1 failed:",e)
}else{
fmt.Println("f1worked:",r)
}
}
for _,i := range []int{7,42}{
if r, e := f2(i); e!=nil{
fmt.Println("f2 failed:",e)
}else{
fmt.Println("f2 failed:",r)
}
}
_,e := f2(42)
if ae, ok := e.(*argError);ok{
fmt.Println(ae.arg)
fmt.Println(ae.prob)
}
}