码迷,mamicode.com
首页 > 其他好文 > 详细

errors _ golang

时间:2015-03-14 19:50:38      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

In Go it‘s idiomatic to communicate errors via an explicit, separate return value. this constrasts errors via an explicit, separate return value. This constrasts with the exceptions used in languages like Java and Ruby and the overloaded single result / error value sometimes used in C. Go‘s approach makes it easy to see which functions return errors and to handle them using the same language constructs employed for any other, non-error tasks

package main

import (
    "errors"
    "fmt"
)

func f1(arg int) (int, error) {
    if arg == 42 {
        return -1, errors.New("can‘t work with 42")
    }
    return arg + 3, nil
}

type argError struct {
    arg  int
    prob string
}

func (e *argError) Error() string {
    return fmt.Sprintf("%d - %s", e.arg, e.prob)
}

func f2(arg int) (int, error) {
    if arg == 42 {
        return -1, &argError{arg, "can‘t work with it"}
    }

    return arg + 3, nil
}

func main() {

    for _, i := range []int{7, 42} {
        if r, e := f1(i); e != nil {
            fmt.Println("f1 failed : ", e)
        } else {
            fmt.Println("f2 worked : ", r)
        }
    }

    for _, i := range []int{7, 42} {
        if r, e := f2(i); e != nil {
            fmt.Println("f2 failed : ", e)
        } else {
            fmt.Println("f2 worked : ", r)
        }
    }

    _, e := f2(42)
    if ae, ok := e.(*argError); ok {
        fmt.Println(ae.arg)
        fmt.Println(ae.prob)
    }
}
f2 worked :  10
f1 failed :  cant work with 42
f2 worked :  10
f2 failed :  42 - cant work with it
42
cant work with it

总结 :

  1 : golang 的 内建函数 builtin.go 里面定义了 type error interface{ Error() string }; 实现了这个方法就是 自定义的 Error(查看源码 command + shift + 鼠标左键)

  2 : ....

errors _ golang

标签:

原文地址:http://www.cnblogs.com/jackkiexu/p/4338023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!