Golang-Error类型

初学Golang,发现一个特别有意思的特性,那就是func多返回值,而以前用js的时候都是组装成对象返回,这个时候就体现出了静态语言的特性了,任何方法的参数不论是数量还是类型都已经定义好了,这样虽有所限制不如js灵活,但方便了规范和封装方法。而这其中最有用的就属返回error了。

error的实质

结构如下:

// 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
}

生成一个新的error

package main

import (
"errors"
"fmt"
)

type Customerror struct {
infoa string
infob string
Err error
}

func (cerr Customerror) Error() string {
errorInfo := fmt.Sprintf("infoa : %s , infob : %s , original err info : %s ", cerr.infoa, cerr.infob, cerr.Err.Error())
return errorInfo
}

func main() {
//方法一:
//采用errors包的New方法 返回一个err的类型
var err error = errors.New("this is a new error")
//由于已经实现了error接口的方法 因此可以直接调用对应的方法
fmt.Println(err.Error())

//方法二:
//采用fmt.Errof 将string信息转化为error信息 并返回
err = fmt.Errorf("%s", "the error test for fmt.Errorf")
fmt.Println(err.Error())

//方法三:
//采用自定义的方式实现一个error的 一个duck 类型
err = &Customerror{
infoa: "err info a",
infob: "err info b",
Err: errors.New("test custom err"),
}
fmt.Println(err.Error())
}

END