【发布时间】:2020-03-11 11:30:14
【问题描述】:
我正在尝试初始化一个 ErrNegativeSqrt,它是一个自定义 float64 类型,但如果我使用 var 进行初始化,它将不起作用。
看看func Sqrt(x float64) (float64, error):
package main
import (
"fmt"
)
type ErrNegativeSqrt float64
func (e *ErrNegativeSqrt) Error() string {
return fmt.Sprint("cannot Sqrt negative number: %f", float64(*e))
}
func Sqrt(x float64) (float64, error) {
if x < 0 {
var err ErrNegativeSqrt = x
// This works: err := ErrNegativeSqrt(x)
return x, &err
}
z := x / 2
i := 1
for prev_z := 0.0; z != prev_z && Abs(z-prev_z) > 0.000000000000001; i++ {
prev_z = z
z -= (z*z - x) / (2 * z)
}
return z, nil
}
func Abs(x float64) float64 {
if x < 0 {
x = -x
}
return x
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}
错误是:./prog.go:15:7: cannot use x (type float64) as type ErrNegativeSqrt in assignment
为什么会这样?和:=的赋值不一样吗?
【问题讨论】: