• A Tour of Go Exercise: Errors


    Copy your Sqrt function from the earlier exercises and modify it to return an error value.

    Sqrt should return a non-nil error value when given a negative number, as it doesn't support complex numbers.

    Create a new type

    type ErrNegativeSqrt float64

    and make it an error by giving it a

    func (e ErrNegativeSqrt) Error() string

    method such that ErrNegativeSqrt(-2).Error() returns "cannot Sqrt negative number: -2".

    Note: a call to fmt.Print(e) inside the Error method will send the program into an infinite loop. You can avoid this by converting e first:fmt.Print(float64(e)). Why?

    Change your Sqrt function to return an ErrNegativeSqrt value when given a negative number.

    package main
    
    import (
        "fmt"
        "strconv"
    )
    type ErrNegativeSqrt float64
    func (e ErrNegativeSqrt) Error() string{
        if e < 0 {
            return "cannot Sqrt negative number:" + strconv.FormatFloat(float64(e),'f',5,64)
        }
        return ""
    }
    func Sqrt(f float64) (float64, error) {
        var e error
        if f < 0 {
            return 0,ErrNegativeSqrt(f)
        }
        var z float64 = 1
        for i := 0; i < 10; i++ {
            z = z - (z*z - f) / (2 * z)
        }
        return z,e
    }
    
    func main() {
        fmt.Println(Sqrt(2))
        fmt.Println(Sqrt(-2))
    }
  • 相关阅读:
    CentOS 7/8修改系统运行级别
    Sketchup 汇总
    [转]Ruby之类的真相
    [转]Ruby之代码块的迷思
    [转]ruby中的异常处理
    [转]ruby中Class的allocate
    [转]ruby中require和load的区别
    [转]ruby之方法查找
    [转]ruby之动态方法
    [转] ruby之对象体系
  • 原文地址:https://www.cnblogs.com/ghgyj/p/4057883.html
Copyright © 2020-2023  润新知