main.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "math"
  6. )
  7. type DivideError struct {
  8. Dividend int
  9. Divisor int
  10. }
  11. func MySqrt(f float64) (float64, error) {
  12. if f < 0 {
  13. return 0, errors.New("math: square root of negative number")
  14. }
  15. return math.Sqrt(f), nil
  16. }
  17. func divide(a, b int) (int, error) {
  18. if b == 0 {
  19. return 0, errors.New("division by zero")
  20. }
  21. return a / b, nil
  22. }
  23. func (e *DivideError) Error() string {
  24. return fmt.Sprintf("cannot divide %d by %d", e.Dividend, e.Divisor)
  25. }
  26. func custom_divide(a, b int) (int, error) {
  27. if b == 0 {
  28. return 0, &DivideError{Dividend: a, Divisor: b}
  29. }
  30. return a / b, nil
  31. }
  32. func main() {
  33. // errors 接口
  34. err := errors.New("this is an error")
  35. fmt.Println(err)
  36. x := 16.0
  37. sqrt, err := MySqrt(x)
  38. if err != nil {
  39. fmt.Println("error:", err)
  40. return
  41. }
  42. fmt.Println("sqrt:", sqrt)
  43. // 显示返回错误
  44. result, err := divide(10, 0)
  45. if err != nil {
  46. fmt.Println("Error: ", err)
  47. } else {
  48. fmt.Println("Result: ", result)
  49. }
  50. // 自定义错误
  51. _, err = custom_divide(10, 0)
  52. if err != nil {
  53. fmt.Println(err)
  54. }
  55. }