首页 > 代码库 > A Tour of Go Exercise: Errors

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 mainimport (    "fmt"    "strconv")type ErrNegativeSqrt float64func (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))}

 

A Tour of Go Exercise: Errors