首页 > 其他分享 >开心档之Go 错误处理

开心档之Go 错误处理

时间:2023-03-24 13:57:15浏览次数:42  
标签:开心 int errorMsg fmt dividee error Go 错误处理 100

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。

error类型是一个接口类型,这是它的定义:


type error interface {
    Error() string
}

我们可以在编码中通过实现 error 接口类型来生成错误信息。

函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息:


func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}

在下面的例子中,我们在调用Sqrt的时候传递的一个负数,然后就得到了non-nil的error对象,将此对象与nil比较,结果为true,所以fmt.Println(fmt包在处理error时会调用Error方法)被调用,以输出错误,请看下面调用的示例代码:


result, err:= Sqrt(-1)

if err != nil {
   fmt.Println(err)
}

实例

实例

package main

import (
"fmt"
)

// 定义一个 DivideError 结构
type DivideError struct {
dividee int
divider int
}

// 实现 `error` 接口
func (de *DivideError) Error() string {
strFormat := `
Cannot proceed, the divider is zero.
dividee: %d
divider: 0
`
return fmt.Sprintf(strFormat, de.dividee)
}

// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
if varDivider == 0 {
dData := DivideError{
dividee: varDividee,
divider: varDivider,
}
errorMsg = dData.Error()
return
} else {
return varDividee / varDivider, ""
}

}

func main() {

// 正常情况
if result, errorMsg := Divide(100, 10); errorMsg == "" {
fmt.Println("100/10 = ", result)
}
// 当除数为零的时候会返回错误信息
if _, errorMsg := Divide(100, 0); errorMsg != "" {
fmt.Println("errorMsg is: ", errorMsg)
}

}

执行以上程序,输出结果为:


100/10 =  10
errorMsg is:  
    Cannot proceed, the divider is zero.
    dividee: 100
    divider: 0
 

标签:开心,int,errorMsg,fmt,dividee,error,Go,错误处理,100
From: https://www.cnblogs.com/gddg/p/17251314.html

相关文章

  • algorithmicx(use algpseudocode as layout)学习记录
    这几天写算法作业,提供的tex文件中使用algorithmicx书写伪代码,虽然也会用algorithm2e,但技多不压身,现在就来学一学。目录概述ExampleDetails行号行注释引用Commandsifblock......
  • mongodb3.4连接数被用满了?
    使用MongoDB时,可能会遇到因为mongod连接数用满了,导致客户端无法连接的问题。mongod的最大连接数通过net.maxIncomingConnections指定,默认值为1000000,相当于没有限制,生......
  • Python 栈 django框架开源商城系统baykeShop
    起始2022年我用django开发了一个商城的第三方包,起名为:django-happy-shop。当时纯粹是利用业余时间来开发和维护这个包,想法也比较简单,Python语言做web可能用的人比较少,不一......
  • 关于安装google-colab包速缓慢的问题解决
    最近想从colab上重构源码包在本地实现,但是总有一个包是来自google.colab的fromgoole.colabimportfiles提示没有google.colab的安装模块,需要安装google-colab的这个包......
  • django-视图
    请求HttpRequest对象常用request属性GET:数据类型时一个类似字典的对象,包含HTTPGET的所有参数get():返回字符串,多个值取出最后一个request.GET.get(......
  • 基于Agora SDK实现Android端的声动互娱(二)——音乐混动
    有人说避免抖音成瘾的最好方法就是静音播放视频,这从侧面反映了音乐和音效在声动互娱领域的重要性,慷慨激昂的音乐能让烈士的就义更加悲壮,轻松愉快的音乐能使高人的隐居更加惬......
  • golang相关介绍
    前言:golang的语言介绍,发展介绍,相关网站正文:golang介绍Go语言(或Golang)起源于2007年,并在2009年正式对外发布。是由Google公司开发的一种静态强类型、编译型、并发......
  • (转)golang beego后端开发框架(二):配置、路由和控制器
    原文:https://www.dianjilingqu.com/178381.html1.beego参数配置beego目前支持INI、XML、JSON、YAML格式的配置文件解析,但是默认采用了INI格式解析,用户可以通过简单的配......
  • Django笔记六之外键ForeignKey介绍
    这一篇笔记介绍Django系统model的外键处理,ForeignKey以及相应的处理方法。这是一种一对多的字段类型,表示两张表之间的关联关系。本篇笔记的目录如下:on_deleterel......
  • .NET生成MongoDB中的主键ObjectId
    前言因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中Ob......