package mainimport ("errors""fmt"
)func main() {/*错误:在可能出现问题的地方出现问题, 如打开一个文件打开失败是意料之中的事情异常:在不该出现错误的地方出现错误, 如出现空指针,意料之外的情况*///exec.Command("pwd")//exec.Command("ps")//f, err := os.Open("test.txt")//if err != nil {// log.Fatal(err)  // print + exit()//    //fmt.Println(err)//}//fmt.Println(f.Name(), "打开成功.....")-------------------/*error 内置了数据类型,内置的接口定义了方法:Error() string// The error built-in interface type is the conventional interface for// representing an error condition, with the nil value representing no error.type error interface {Error() string}*/err1 := errors.New("创建测试的错误处理函数")fmt.Println(err1)fmt.Printf("%T\n", err1)//另外一个创建错误的方法err2 := fmt.Errorf("错误的信息:%d", 100)fmt.Println(err2)fmt.Printf("%T\n", err2)fmt.Println("--------------------")err3 := checkAge(-30)if err3 != nil {fmt.Println(err3)return}fmt.Println("程序 go on")fmt.Println("errno demo")
}
func checkAge(age int) (err error) {if age < 0 {//return errors.New("年龄不合法")err = fmt.Errorf("你给的年龄是%d,不合法", age)return}fmt.Println("年龄是:", age)return nil
}

自定义结构体中实现对错误接口的实现
可以看到error接口中只有Error一个函数
areaError实现了Error函数,那么按照接口的特性,

func main() {radius := -3.8area, err := circleArea(radius)if err != nil {//err.Error()// err 是error接口类型,那么Println(err)中会调用 func (e *areaError) Error() string // 并输出 areaError结构体的信息,有助于查看出错的原因fmt.Println(err)return}fmt.Println("圆形的面积是:", area)fmt.Println("errno demo")
}
package mainimport ("fmt""math"
)func main() {radius := -3.8area, err := circleArea(radius)if err != nil {//err.Error()fmt.Println(err)return}fmt.Println("圆形的面积是:", area)fmt.Println("errno demo")
}// 定义一个结构体,表示错误的类型
type areaError struct {msg    stringredius float64
}// 实现error接口,就是实现error方法
func (e *areaError) Error() string {return fmt.Sprintf("error:半径是, %.2f,%s", e.redius, e.msg)
}func circleArea(radius float64) (float64, error) {if radius < 0 {return 0, &areaError{"半径是非法的", radius}}return math.Pi * radius * radius, nil
}

go语言中错误的处理和实现自己的错误处理类型相关推荐

  1. c语言中当二维数组越界时会有错误提示,萌新请教大佬们。动态二维数组莫名其妙越界了,找了半天没发现有错啊...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include using namespace std; int main() { int n,i; cin>>n; int **p=new ...

  2. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  3. 如何在不同开发语言中使用绑定变量_linux C/C++服务器后台开发面试题总结(编程语言篇)...

    整篇分为四部分,篇幅较长,建议先收藏. 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别? 主要浅谈下C/C++和PHP语言的区别: 1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较 ...

  4. C语言重要知识点总结【7】:C语言中的常量、变量、标识符

    目录 一.常量 1. 整型常量 2. 实型常量(浮点型常量) 3. 字符常量 3.1 普通字符 3.2 转义字符(表格) 3.3 常见字符与ASCII代码表 4. 字符串常量 4.1 字符串所占内存字 ...

  5. 定义字母为小数c语言,c语言中小数怎么写

    1.c语言中小数怎么表示 4.2用C语言表示:double d = 4.2.C语言中用于描述小数的数据类型是float和double,float类型表示单精度浮点数,double表示双精度浮点数. 1 ...

  6. Go语言中的字符和字符串

    Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称. 下面用一个简单的程序来演示字符类型: package mainimport ("fmt&q ...

  7. c语言中静态存储类别是,小议C语言中数据的存储类型

    C语言中的一些说明和定义会用到存储类型这样一个概念,在C语言中存储类型会用到下述几个关键字:auto,static,register,extern. 看下面的简略图大家可以明确程序在进行存储时是分为三 ...

  8. C语言中常见数据类型和对应内存空间大小

    C语言的数据类型是指变量所能存储的数据范围和格式的类型.C语言提供了以下几种基本的数据类型: int类型:int类型用于存储整数(正数.负数.零).它可以有不同的位数,例如int类型可以是16位.32 ...

  9. R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)

    R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar) 目录

  10. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制

    上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...

最新文章

  1. Forefront_TMG_2010-TMG建立站点间***
  2. 大家一起来博皮——2:液态布局和固态布局,页面框架篇
  3. Spark MLlib实现的广告点击预测–Gradient-Boosted Trees
  4. 微软Build 2016开发者大会--兑换承诺
  5. 前端如何发ModelAndView的请求
  6. 在单用户模式下启动SQL Server的不同方法
  7. [] ubuntu 14.04 搜狗拼音输入法安装
  8. 关于点击button按钮自动刷新页面导致ajax来不及执行的原因
  9. iconfont 图标宽高出问题_IconFont使用注意点
  10. 【linux内核分析与应用-陈莉君】字符设备驱动
  11. 自己生成aar包时,含有第三方依赖,导入项目使用
  12. 常见js针对浏览器之间的兼容问题
  13. 直播预告|年营业额百亿的企业都在如何做数字化转型
  14. 计算机自带的游戏怎么找xp,教你怎样查询Windows XP/Windows 7自带系统游戏路径
  15. mysql分组查询最新数据
  16. 手机号,身份证号,姓名等校验
  17. 【Linux】gcc/g++的使用详解静动态库
  18. DDR4两根4G组的双通道跟1根8G单通道有什么区别?
  19. Shiro学习(3)shiroConfig配置类
  20. Web前端面试题整合,持续更新【可以收藏】

热门文章

  1. JSP简单练习-使用JDOM创建xml文件
  2. NYOJ 679 贪婪的商店
  3. Jquery----实现抽奖效果(根据姓名抽奖)
  4. Treap与fhq_Treap模板(支持内存回收)
  5. cmd命令大全 DOS窗口命令
  6. 【转】jQuery.ajax向后台传递数组问题
  7. 关于git提交的自己的理解
  8. 【学习笔记】【C语言】返回指针的函数
  9. FPGA机器学习之stanford机器学习第三堂2
  10. 现代谱估计:多窗口谱重建