ThatManK Mobile Article
Go基础_1_54 自定义结构体实现错误2
package main
import "fmt"
type areaError struct {
msg string // 错误的描述
lenght float64 // 发生错误的时候,矩形的长度
width float64 // 发生错误的时候,矩形的宽度
}
func (e *areaError) Error() string {
return e.msg
}
func (e *areaError) legnthNegative() bool {
return e.lenght < 0
}
func (e *areaError) widthNegative() bool {
return e.width < 0
}
func rectArea(length, width float64) (float64, error) {
msg := ""
if length < 0 {
msg = "长度小于零"
}
if width < 0 {
if msg == "" {
msg = "宽度小于零"
} else {
msg += ",宽度也小于零"
}
}
if msg != "" {
return 0, &areaError{msg, length, width}
}
return length * width, nil
}
func main() {
length, width := 6.7, -9.1
area, err := rectArea(length, width)
if err != nil {
fmt.Println(err) // 宽度小于零
if err, ok := err.(*areaError); ok {
if err.legnthNegative() {
fmt.Printf("error:长度,%.2f,小于零\n", err.lenght)
}
if err.widthNegative() {
fmt.Printf("error:宽度,%.2f,小于零\n", err.width)
// error:宽度,-9.10,小于零
}
}
return
}
fmt.Println("矩形的面积是:", area)
}