go语言基础 实现error接口

本文介绍如何在Go语言中使用两种方式自定义错误信息。一种是通过errors.New直接创建错误,另一种是定义一个结构体并实现Error接口来创建更复杂的错误类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Error是个接口,有两种可以自定义错误信息的方法

第一种errors.New(string) 在errors包下,有封装号好了的方法直接在里面写上错误信息就可以

err = errors.New("写错了")

第二种 就是声明一个结构体,直接实现Error接口里的方法

package main

import "fmt"

//1.定义一个结构体,实现error接口
type RectError struct {
   //字段
   msg string //错误的文字描述
   wid float64//
   len float64 //
}

func (r *RectError) Error() string  {
   //return "宽度:"+r.wid+",高度:"+r.len+",错误提示:"+r.msg
   return fmt.Sprintf("宽度:%.2f,高度:%.2f,错误提示:%s", r.wid,r.len,r.msg)
}


func rectArea(width, length float64) (float64, error){ // -4, 8
   // 1.拼接错误的信息
   errMsg := "" // string
   if width <= 0{
      errMsg = "宽度不能小于等于零"
   }
   if length <= 0{
      if errMsg == ""{
         errMsg = "长度不能小于等于零"
      }else {
         errMsg += ",长度也不能小于等于零"
      }
   }
   //2. 判断错误的信息:""
   if errMsg != ""{
      // 返回结果
      return 0, &RectError{errMsg, width,length}
   }
   //3,如果没有错误,进行计算
   area := width * length
   return area,nil


}
func main()  {
   /*
   自定义错误的类型:
      error-->interface{Error() string}

      只要实现了该接口,就可以作为错误的一种类型
    */
    area, err:=rectArea(-4,-8)
    if err != nil{//有错误,打印错误信息
      fmt.Println(err)
    }else {//没有错误,打印面积
      fmt.Println(area)
    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值