Go源码学习之erros

Go源码学习之erros

go语言的设计非常简单优雅,这点我们从它的erros模块就可以窥探一二。
error的定义路径在src/builtin/builtin.go中

type error interface {
    Error() string
}

就是一个接口,包含一个Error方法,我们再看下erros模块的实现
下面是src/errors/errors.go代码:

package errors

// New returns an error that formats as the given text.
func New(text string) error {
    return &errorString{text}
}

// errorString is a trivial implementation of error.
type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}

可以看到非常简单,首先是一个初始化函数New接收string类型,返回的事一个
errorString类型的结构体。
还有一个errorString类型的Error方法,返回的是错误信息。
是不是很简单,调用也相当简单,只要

import "error"
error.New(${errorMessage})

就可以了
这里它是能接收string类型的错误信息,如果我们想返回我们自己的错误类型呢,很简单,只要我们重写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 main() {
    return MyError{
        time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC),
        "the file system has gone away",
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值