Go错误处理(二)

1,.error接口的定义

  1. type error interface{
  2. Error() string
  3. }

2.error的使用

  1. func Foo(param int)(n int,err error){
  2. //函数定义
  3. }
  4. n,err:=Foo(0)
  5. if err!=nil{
  6. //错误处理
  7. }else{
  8. //使用返回值n
  9. }

3.自定义error类型

  • 定义一个承载错误信息的struct
  1. type PathError struct{
  2. op string
  3. path string
  4. Err error
  5. }
  • 定义Error方法
  1. func (e *PathError) Error() string{
  2.     return e.op+" "+e.path+":"+e.Err.Error()
  3. }

defer:相当于C#中的Filnaly,总会被执行,并且他的执行顺序呢是先进后出


  1. func CopyFile(dst, src string) {
  2. defer fmt.Println(dst)
  3. defer fmt.Println(src)
  4. fmt.Println("copy")
  5. }

copy

c:\2.txt

c:\oem8.txt

panic:相当于throw,recover:相当于catch

  1. defer func() { //必须要先声明defer,否则不能捕获到panic异常
  2. if err := recover(); err != nil {
  3. fmt.Println(err) //这里的err其实就是panic传入的内容,55
  4. }
  5. }()
  6. f()
  7. func f() {
  8. fmt.Println("a")
  9. panic(55)
  10. fmt.Println("b")
  11. }
输出为

a

55

这里panic后面的fmt.Println("b")未被执行,所以后面的信息没有b

来自为知笔记(Wiz)

时间: 2024-07-28 18:55:32

Go错误处理(二)的相关文章

学习hibernate出现错误--之二(方言)

最近在学习hibernate,其中关于错误的问题真是一头大,各种各样的奇葩错误层出不穷,简直是受不了了. 用hibernate操作数据库,在使用hibernate进行把持久化类自动生成相关数据库表的时候,出现了一些问题. 其中有上篇错误<hibernate学习错误--之一>,在上篇错误解决完成后,进行测试时通过了,没有报错,但是却没有生成表,控制台窗口显示一些找不到相关table的警告,找了半天也不知道错误出现再哪儿,查看配置文件感觉也没问题,配置文件上的一些基本信息,有些是原封不动的从以前一

java错误篇二

有时候我们用Myeclipse开发时会出现一些莫名其妙的错误,明明我们没有写错,可是工具却提示错误,显现出个红×,比如我们在写struts.xml时有时候Myeclipse会给你报个错误,例如下: Multiple annotations found at this line: - <result name="success" type="redirect">/emp_list</result> - Invalid result locati

ios block常见的错误(二)——循环引用

这篇博文继续block的常见错误--循环引用. 循环引用是很多初学者不能察觉的,其产生的原因,是block中的代码会对对象进行强引用. 读者请阅读示例代码1,并思考示例代码1所创建的对象能否被正常销毁? 示例代码1: * mark 将代码改为调用self的方法 -(NSMutableArray * (_myBlocks ===-=(^sum)(, ) = ^( x,  mark 对象被释放时自动调用 - ( 结果是不能正常释放的.读者不妨在xcode中试试. 产生原因在block代码中出现了se

MySQL学习笔记11复制错误处理(二)删除不存在的行的问题

(1)问题情况 在master上删除某个数据表的某一行,而该行在slave上并不存在,则slave上的复制过程会出错. MySQL的log文件中发现如下错误信息: 2017-08-15T04:52:19.529509Z 13 [ERROR] Slave SQL for channel '': Could not execute Delete_rows event on table test.test; Can't find record in 'test', Error_code: 1032;

Spring SpringMVC文件上传错误(二)

续上文, 场景: 不上传文件提交表单. 简述一下:表单请求的两种方式 同步提交 异步提交 笔者之前写过的测试Demo: HTML: <form action="upload.do" method="post" enctype="multipart/form-data"> <input type="file" name="fileName" /> <input type=&quo

批量添加ip出错误之二

Determining if ip address 43.241.255.196 is already in use for device eth1... Determining if ip address 43.241.255.197 is already in use for device eth1... Determining if ip address 43.241.255.198 is already in use for device eth1... Determining if i

寻找二叉搜索树错误的节点

一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值.保证二叉树中结点的值各不相同. 给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前. 第一种方式:采用递归的方式---加大其运算效率 第一次出现逆序对选择较大值,第二次出现的逆序对选择较小值  ---此算法只能找到2对出现 错误的位置 1 import java.util.*; 2 3 /* 4 public class TreeNode { 5 int val

HTTPS那些事(二)SSL证书

转自:http://www.guokr.com/post/116169/ 从第一部分HTTPS原理中, 我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密码.在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的

[转]JVM系列二:GC策略&amp;内存申请、对象衰老

原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young genera

Socket常见错误

一.简介 本文介绍 Socket 连接常见错误.   二.常见错误 1)ECONNABORTED 描述:"software caused connection abort",即"软件引起的连接中止" 原因:当服务和客户进程在完成用于 TCP 连接的"三次握手"后,客户 TCP 发送了一个 RST (复位)   2)ECONNRESET 描述:"connection reset by peer",即"对方复位连接&qu