首页 > 其他分享 >Go 错误处理

Go 错误处理

时间:2023-08-14 21:13:46浏览次数:38  
标签:varDivider int errorMsg fmt dividee Go DivideError 错误处理

 

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

error类型是一个接口类型

type error interface {
Error() string
}

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)
}

}

标签:varDivider,int,errorMsg,fmt,dividee,Go,DivideError,错误处理
From: https://www.cnblogs.com/fczlm/p/17629742.html

相关文章

  • Go 语言反射(Reflect)
    Go语言提供了一种机制,在不知道具体类型的情况下,可以用反射来更新变量值,查看变量类型Typeofpackagemainimport( "fmt" "reflect")funcmain(){ varbooknumfloat32=6 varisbookbool=true bookauthor:="www.w3cschool.cn" bookdetail:=make(map[string]string) bo......
  • 13 桥接模式 -- go语言设计模式
    桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(HandleandBody)模式或接口(interface)模式。桥接模式的实现代码packagemainimport"fmt"//发送信息的具体实现(操作)typeMessageImplementerinterface{ send(test,......
  • 让 GPT-4 来修复 Golang “数据竞争”问题 - 每天5分钟玩转 GPT 编程系列(6)
    目录1.Golang中的“数据竞争”2.GoPool中的数据竞争问题3.让GPT-4来修复数据竞争问题3.1和GPT-4的第一轮沟通3.2和GPT-4的第二轮沟通3.3提交代码4.总结1.Golang中的“数据竞争”我在上个月发过一篇《跟着GPT-4从0到1学习Golang并发机制(三)》,文中有一节专......
  • E. Maximum Monogonosity
    E.MaximumMonogonosityYouaregivenanarray$a$oflength$n$andanarray$b$oflength$n$.Thecostofasegment$[l,r]$,$1\lel\ler\len$,isdefinedas$|b_l-a_r|+|b_r-a_l|$.Recallthattwosegments$[l_1,r_1]$,$1\lel_1\ler......
  • Go 语言范围(Range)
    range关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。packagemainimport"fmt"funcmain(){//这是我们使用range去求一个slice的和。使用数组跟这个很类似nums:=[]int{2,3,4}sum:=0for_,num:=rangenums{......
  • Go 语言Map(集合)
    定义Map/*声明变量,默认map是nil*/varmap_variablemap[key_data_type]value_data_type/*使用make函数*/map_variable=make(map[key_data_type]value_data_type) packagemainimport"fmt"funcmain(){varcountryCapitalMapmap[string]string/*创建......
  • Go 语言递归函数
    递归,就是在运行的过程中调用自己。阶乘packagemainimport"fmt"funcFactorial(xint)(resultint){ifx==0{result=1}else{result=x*Factorial(x-1)}return}funcmain(){variint=15fmt.Printf("%d的阶乘是%d\n",i......
  • Go 语言类型转换
    packagemainimport"fmt"funcmain(){varsumint=17varcountint=5varmeanfloat32mean=float32(sum)/float32(count)fmt.Printf("mean的值为:%f\n",mean)}go不支持隐式转换类型错:packagemainimport"fmt"funcmain(......
  • Go 语言接口
    Go语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 packagemainimport("fmt")typePhoneinterface{call()}typeNokiaPhonestruct{}func(nokiaPhoneNokiaPhone)call(){fmt......
  • Go 语言切片(Slice)
    切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。定义varidentifier[]typevarslice1[]type=make([]type,len)slice1:=make([]type,len)make([]T,length,capacity)len()和cap()函数packagemainimport"fmt"funcmain(){varnumbers=......