golang 基础(33)异常处理
栏目: JavaScript · 发布时间: 6年前
内容简介:对出初学者往往忽视程序中异常处理,认为程序总是是在一个被百般呵护的环境运行,没有任何风吹雨打,这是因为我们是最了解自己程序的人。所以我们知道他喜欢什么,什么能吃什么不能吃。不过终归有一天他回归自然。这是适应外界环境是他能否在激烈竞争市场存活的基本条件。这种适应外界恶劣环境能力就是他对异常或错误处理的能力。在 go 语言中引入标准错误处理模型,错误接口。只要实现了 error 接口的数据类型我们就可以认为其为错误类型。通过代码证明一下上面的结论,定义 errorString 结构体,然后让其实现 Error
golang_real.jpg
对出初学者往往忽视程序中异常处理,认为程序总是是在一个被百般呵护的环境运行,没有任何风吹雨打,这是因为我们是最了解自己程序的人。所以我们知道他喜欢什么,什么能吃什么不能吃。不过终归有一天他回归自然。这是适应外界环境是他能否在激烈竞争市场存活的基本条件。这种适应外界恶劣环境能力就是他对异常或错误处理的能力。
在 go 语言中引入标准错误处理模型,错误接口。只要实现了 error 接口的数据类型我们就可以认为其为错误类型。
type error interface {
Error() string
}
通过代码证明一下上面的结论,定义 errorString 结构体,然后让其实现 Error 方法,只要实现 interface 的方法我们认为这个结构体就实现了 error 接口。这个就是 go 语言接口设计巧妙之处。
type errorString struct{
s string
}
type (e *errorString) Error() string{
return e.string
}
在之前接触到一些有关 IO 或者网络操作函数都会在多重返回值中返回一个错误,错误类型通常位于最后一个返回值。虽然这只是一种习惯,也希望大家在设计函数式按照习惯来。好的规范才有优雅的代码。
type Tut struct {
Title string
Courses int
}
var db map[string]Tut
func addTut(t Tut) error{
if t.Courses == 0 {
return // 如果只有 title 没有课程数我们就抛出一个错误
}
//如果添加课程已经存在于 db 中,我们就抛出条目重复
// 对数据进行保存
db[t.Title] = t
return nil
}
我们在添加课程 addTut 方法返回一个错误,发生错误情况如下
- 添加课程的课程数为零情况
- 数据库中已经存在该课程记录
下面为具体实例,大家可以自己试一试
ype Tut struct {
Title string
Courses int
}
var db map[string]Tut
func addTut(t Tut) error{
if t.Courses == 0 {
return errors.New("课程不能为 0 ")
}
_, ok := db[t.Title]
if !ok {
return errors.New("重复记录")
}
db[t.Title] = t
return nil
}
func main() {
db = make(map[string]Tut)
angularTut := Tut{ Title:"angular", Courses: 0}
err := addTut(angularTut)
if err != nil{
fmt.Println("错误处理: " + err.Error())
}
//处理错误
angularTwoTut := Tut{ Title:"angular", Courses: 0}
err3 := addTut(angularTwoTut)
if err3 != nil{
}
angularDuplicated := Tut{Title:"angular",Courses:10}
err2 := addTut(angularDuplicated)
if err2 != nil{
fmt.Println("错误处理" + err2.Error())
}
}
错误处理: 课程不能为 0 错误处理重复记录
在 addTut 内部对我们之前认为错误两种情况进行判断,如果认为是错误我们就抛出 Error ,通过定义不同输出内容编译使用者了解错误发生原因。
var (
ErrNoErrors = errors.New("课程数为 0 ")
ErrDuplicateEntry = errors.New("重复记录")
)
func addTut(t Tut) error{
if t.Courses < 1 {
return ErrNoErrors
}
_, ok := db[t.Title]
if !ok {
return ErrDuplicateEntry
}
db[t.Title] = t
return nil
}
我们可以重构一下代码对代码进行优化,根据之前定义好错误类型进行判断错误来进行输出。
func addTut(t Tut) error{
if t.Courses < 1 {
return ErrNoErrors
}
_, ok := db[t.Title]
if !ok {
return ErrDuplicateEntry
}
db[t.Title] = t
return nil
}
func main() {
db = make(map[string]Tut)
angularTut := Tut{ Title:"angular", Courses: 0}
err := addTut(angularTut)
switch err {
case ErrNoErrors:
fmt.Println("错误处理: 课程数不能为 0 ")
case ErrDuplicateEntry:
fmt.Println("错误处理: 该课程已存在无法重复添加")
}
//处理错误
angularTwoTut := Tut{ Title:"angular", Courses: 0}
err3 := addTut(angularTwoTut)
if err3 != nil{
}
angularDuplicated := Tut{Title:"angular",Courses:10}
err2 := addTut(angularDuplicated)
switch err2 {
case ErrNoErrors:
fmt.Println("错误处理: 课程数不能为 0 ")
case ErrDuplicateEntry:
fmt.Println("错误处理: 该课程已存在无法重复添加")
}
}
import(
"fmt"
"errors"
)
func main() {
const fn = "temp.cpp"
var ln = 19
text := fmt.Sprintf("compile problem with %q: %d",fn,ln)
err := errors.New(text)
if err != nil{
fmt.Println(err)
}
}
th-7.jpeg
以上所述就是小编给大家介绍的《golang 基础(33)异常处理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JVM基础 -- 异常处理
- Flutter尝鲜2——动画处理<基础>
- OpenCL:图像处理基础note
- Python基础数据处理库-Pandas
- [ Laravel 5.7 文档 ] 基础组件 —— 错误处理
- MySQL查询执行的基础——查询优化处理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Visual Thinking
Colin Ware / Morgan Kaufmann / 2008-4-18 / USD 49.95
Increasingly, designers need to present information in ways that aid their audiences thinking process. Fortunately, results from the relatively new science of human visual perception provide valuable ......一起来看看 《Visual Thinking》 这本书的介绍吧!