цикл. Вы можете избежать этого сконвертировав для начала e: fmt.Sprintf("cannot Sqrt negative number: %v", float64(e)). Почему?
package main
import (
"fmt"
)
type ErrNegativeSqrt float64
func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %v", float64(e))
}
func Sqrt(x float64) (float64, error) {
if x < 0 {
return 0, ErrNegativeSqrt(x)
}
return x, nil
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}
Очень коварная ловушка, что с error, что со Stringer, что с Valuer (но тут не всегда)
Обсуждают сегодня