Go语言学习之errors包(The way to go)

生命不止,继续go go go !

今天跟大家分享的是errors package,一个简单但是非常实用的技巧。

在http包中,有个Get方法如下:

func (c *Client) Get(url string) (resp *Response, err error)

我们看到了返回值,有error。我们可以对这个error进行处理:

resp, err := c.Get("http://blog.csdn.net/wangshubo1989?viewmode=contents")
if err != nil {
    log.Println(err)
    return
}

Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示未遇到错误,否则 error 会返回一个字符串,用于说明遇到了什么错误。通俗的说,error就是一个接口而已,定义如下:
声明

type error interface {
    Error() string

}

New方法
将字符串 text 包装成一个 error 对象返回
New returns an error that formats as the given text.

func New(text string) error

例子:
看看io.go中的定义:

var ErrShortWrite    = errors.New("short write")
var ErrShortBuffer   = errors.New("short buffer")
var EOF              = errors.New("EOF")
var ErrUnexpectedEOF = errors.New("unexpected EOF")
var ErrNoProgress    = errors.New("multiple Read calls return no data or error")

定义自己的错误
实现error接口

package main

import (
    "fmt"
    "time"
)

// MyError is an error implementation that includes a time and message.
type MyError struct {
    When time.Time
    What string
}

func (e MyError) Error() string {
    return fmt.Sprintf("%v: %v", e.When, e.What)
}

func oops() error {
    return MyError{
        time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC),
        "the file system has gone away",
    }
}

func main() {
    if err := oops(); err != nil {
        fmt.Println(err)
    }
}

go中的错误处理如此优雅
这个就是为了显示一下go语言的优势了,哈哈,java躺枪。
java:

try {
    String response = ET.phoneHome("I hate white lab coats.")
    System.out.println(response);
} catch(Exception e) {
    System.out.println("Exception thrown :" + e);
}

go:

if err != nil {
    // handle the error
}

你可能感兴趣的:(error,Go)