zoukankan      html  css  js  c++  java
  • errors _ golang

    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 :  can't work with 42
    f2 worked :  10
    f2 failed :  42 - can't work with it
    42
    can't work with it

    总结 :

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

      2 : ....

  • 相关阅读:
    Kafka2.0服务端写入和读取流程
    Kafka2.0服务端启动源码
    Kafka2.0消费者协调器源码
    Kafka2.0消费者客户端源码分析
    [六省联考2017]分手是祝愿 题解(期望dp)
    [信息学奥赛一本通oj1741]电子速度 题解
    [CSP-S模拟测试53]题解
    [CSP-S模拟测试52]题解
    [CSP-S模拟测试ex]题解
    [CSP-S模拟测试51]题解
  • 原文地址:https://www.cnblogs.com/jackkiexu/p/4338023.html
Copyright © 2011-2022 走看看