1 package main
2
3 import (
4 "fmt"
5 "math"
6 )
7
8 //1.定义一个结构体,表示错误的类型
9 type areaError struct {
10 msg string
11 radius float64
12 }
13
14 // 2.实现error接口,就是实现Error()方法
15 func (e *areaError) Error() string {
16 return fmt.Sprintf("error:半径,%.2f,%s", e.radius, e.msg)
17 }
18
19 func circleArea(radius float64) (float64, error) {
20 if radius < 0 {
21 return 0, &areaError{"半径是非法的", radius}
22 }
23 return math.Pi * radius * radius, nil
24 }
25
26 func main() {
27 /*
28 自定义错误:
29 */
30
31 radius := -3.0
32 area, err := circleArea(radius)
33
34 if err != nil {
35 fmt.Println(err)
36 if err, ok := err.(*areaError); ok {
37 fmt.Printf("半径是:%.2f\n", err.radius)
38 }
39 return
40 }
41 fmt.Println("圆形的面积是:", area)
42
43 }