go语言中错误的处理和实现自己的错误处理类型
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语言中错误的处理和实现自己的错误处理类型相关推荐
- c语言中当二维数组越界时会有错误提示,萌新请教大佬们。动态二维数组莫名其妙越界了,找了半天没发现有错啊...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include using namespace std; int main() { int n,i; cin>>n; int **p=new ...
- c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配
#include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...
- 如何在不同开发语言中使用绑定变量_linux C/C++服务器后台开发面试题总结(编程语言篇)...
整篇分为四部分,篇幅较长,建议先收藏. 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别? 主要浅谈下C/C++和PHP语言的区别: 1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较 ...
- C语言重要知识点总结【7】:C语言中的常量、变量、标识符
目录 一.常量 1. 整型常量 2. 实型常量(浮点型常量) 3. 字符常量 3.1 普通字符 3.2 转义字符(表格) 3.3 常见字符与ASCII代码表 4. 字符串常量 4.1 字符串所占内存字 ...
- 定义字母为小数c语言,c语言中小数怎么写
1.c语言中小数怎么表示 4.2用C语言表示:double d = 4.2.C语言中用于描述小数的数据类型是float和double,float类型表示单精度浮点数,double表示双精度浮点数. 1 ...
- Go语言中的字符和字符串
Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称. 下面用一个简单的程序来演示字符类型: package mainimport ("fmt&q ...
- c语言中静态存储类别是,小议C语言中数据的存储类型
C语言中的一些说明和定义会用到存储类型这样一个概念,在C语言中存储类型会用到下述几个关键字:auto,static,register,extern. 看下面的简略图大家可以明确程序在进行存储时是分为三 ...
- C语言中常见数据类型和对应内存空间大小
C语言的数据类型是指变量所能存储的数据范围和格式的类型.C语言提供了以下几种基本的数据类型: int类型:int类型用于存储整数(正数.负数.零).它可以有不同的位数,例如int类型可以是16位.32 ...
- R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)
R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar) 目录
- c语言c2182是什么错误,C语言中一种更优雅的异常处理机制
上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...
最新文章
- Forefront_TMG_2010-TMG建立站点间***
- 大家一起来博皮——2:液态布局和固态布局,页面框架篇
- Spark MLlib实现的广告点击预测–Gradient-Boosted Trees
- 微软Build 2016开发者大会--兑换承诺
- 前端如何发ModelAndView的请求
- 在单用户模式下启动SQL Server的不同方法
- [] ubuntu 14.04 搜狗拼音输入法安装
- 关于点击button按钮自动刷新页面导致ajax来不及执行的原因
- iconfont 图标宽高出问题_IconFont使用注意点
- 【linux内核分析与应用-陈莉君】字符设备驱动
- 自己生成aar包时,含有第三方依赖,导入项目使用
- 常见js针对浏览器之间的兼容问题
- 直播预告|年营业额百亿的企业都在如何做数字化转型
- 计算机自带的游戏怎么找xp,教你怎样查询Windows XP/Windows 7自带系统游戏路径
- mysql分组查询最新数据
- 手机号,身份证号,姓名等校验
- 【Linux】gcc/g++的使用详解静动态库
- DDR4两根4G组的双通道跟1根8G单通道有什么区别?
- Shiro学习(3)shiroConfig配置类
- Web前端面试题整合,持续更新【可以收藏】