go 错误处理 error

发布于:2025-02-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

普通错误处理

// 包路径
package main

import (
    "errors"
    "fmt"
)

func sqrt(f1, f2 float64) (float64, error) {
    if f2 < 0 {
        return 0, errors.New("error: f2 < 0")
    }
    return f1 / f2, nil
}

func sqrt1(f1, f2 float64) {
    if re, err := sqrt(f1, f2); err == nil {
        fmt.Println("计算没有错误,结果为:", re)
    } else {
        fmt.Println("计算发生错误,错误信息为:", err)
    }
}

//  main方法
func main() {
    
    // 错误机制是利用多个返回值机制实现
    
    // 计算没有错误,结果为: 1
    sqrt1(1.1, 1.1)
    
    // 计算发生错误,错误信息为: error: f2 < 0
    sqrt1(1.1, -1.1)
    
}

自定义error

package main

import (
    "log"
)

// 自定义异常类型
type CustomerDefinitionError struct {
    message string
}

// 实现Error方法,用来标记是自定义错误
// err CustomerDefinitionError 只读err
// err *CustomerDefinitionError 可以修改err
func (err *CustomerDefinitionError) Error() string {
    return err.message
}

// 注意抛出方法
func throwUDError() error {
    return &CustomerDefinitionError{"错误信息!!!"}
}

func main() {
    log.Println("main ...")

    err := throwUDError()
    log.Println(err.Error())

    // 类型的判断
    if pathErr, ok := err.(*CustomerDefinitionError); ok {
       log.Println("This is user definition error", pathErr)
    }

    switch vt := err.(type) {
    case *CustomerDefinitionError:
       log.Println("This is user definition error", vt)
    default:
       log.Println("other type error")
    }

    log.Println("success ..")
}