我正在完成A Tour of Go - 练习:错误。当我向平方根函数添加错误处理时,它握住了我的手。
这是我的解决方案:
package main
import (
"fmt"
"math"
)
type ErrNegativeSqrt float64
func (e ErrNegativeSqrt) Error() string {
fmt.Sprint(float64(e))
return fmt.Sprintf("cannot Sqrt negative number: %g", float64(e))
}
func Sqrt(x float64) (float64, error) {
z := 1.0
margin := 0.00000000000001
for {
if x < 0 {
return 0, ErrNegativeSqrt(x)
}
previousZ := z
z = z - (z*z-x)/(2*z)
if math.Abs(previousZ-z) < margin {
fmt.Println(previousZ, "-", z, "=", previousZ-z)
break
}
}
fmt.Println("math.Sqrt:", math.Sqrt(x))
return z, nil
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}
我无法理解这条线:
type ErrNegativeSqrt float64
我有两个问题:
为什么 ErrNegativeSqrt 的底层类型是“float64”而不是“error”?
和
为什么首先要创建一个类型?为什么我们要创建一个错误类型并向其添加一个方法,而不是仅仅拥有一个独立的函数?
我是 Go 的初学者,我想了解一下。太感谢了。
慕的地8271018
繁星淼淼
九州编程
相关分类