You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

golang 没有采取try-catch 机制在golang中不存在异常的说法。而错误被分为三类

  • error 部分流程出错,需要处理
  • panic 很严重的问题,程序应该在处理完问题后立即退出
  • fatal 非常致命的问题,程序应该立即退出

error

打开一个名为README.txt的文件,如果打开失败函数将会返回一个错误,输出错误信息,如果错误为空的话那么就是打开成功,输出文件名。这样看起来似乎是要比try-catch简洁一些,那如果有特别多的函数调用,将会到处都充斥着if err != nil 这种判断语句外界对于Go主要诟病的点几乎都在错误处理上了说到底并没有比try-catch好到哪里去

func main() {
	// 打开一个文件
	if file, err := os.Open("README.txt"); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(file.Name())
	}
}

error属于是一种正常的流程错误它的出现是可以被接受的大多数情况下应该对其进行处理当然也可以忽略不管error的严重级别不足以停止整个程序的运行。error本身是一个预定义的接口,该接口下只有一个方法Error(),该方法的返回值是字符串,用于输出错误信息

type error interface {
   Error() string
}

1.error的创建

//第一种
err := errors.New("这是一个错误")
//第二种
err := fmt.Errorf("这是%d个格式化参数的的错误", 1)

2.自定义error

panic

fatal