Go指南練習_錯誤


源地址 https://tour.go-zh.org/methods/20

一、題目描述

之前的練習中復制 Sqrt 函數,修改它使其返回 error 值。

Sqrt 接受到一個負數時,應當返回一個非 nil 的錯誤值。復數同樣也不被支持。

創建一個新的類型

type ErrNegativeSqrt float64

並為其實現

func (e ErrNegativeSqrt) Error() string

方法使其擁有 error 值,通過 ErrNegativeSqrt(-2).Error() 調用該方法應返回 "cannot Sqrt negative number: -2"

*注意:* 在 Error 方法內調用 fmt.Sprint(e) 會讓程序陷入死循環。可以通過先轉換 e 來避免這個問題:fmt.Sprint(float64(e))。這是為什么呢?

修改 Sqrt 函數,使其接受一個負數時,返回 ErrNegativeSqrt 值。

 

 

二、分析

  • 定義float64的類型ErrNegativeSqrt;
  • 重寫Error方法。

 

三、Go代碼

package main

import (
    "fmt"
    "math"
)

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 math.Sqrt(x), nil
}

func main() {
    fmt.Println(Sqrt(2))
    fmt.Println(Sqrt(-2))
}

運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM