Go 言語エラー インターフェイス: エラー情報を返す

Go 言語エラー インターフェイス: エラー情報を返す

 
 
エラーハンドリングはどのプログラミング言語においても重要な内容ですが、開発中に遭遇する例外やエラーには大きく分けて2種類ありますが、Go言語も例外ではありません。このセクションでは主に Go 言語のエラー処理について学びます。

 

C 言語では、エラーは -1 や NULL などの戻り情報で示されますが、ユーザーにとっては、対応する API ドキュメントを確認しないと、戻り値が何を意味するのかを理解することができません。失敗?

このような状況に対応して、Go 言語にはエラー処理の標準モードとして error インターフェース型が導入されており、関数がエラーを返す場合には戻り値の型リストに error を含める必要があります。エラー処理プロセスは C 言語のエラー コードに似ており、処理されるまでレイヤーごとにエラー コードを返すことができます。

エラーの基本的な使い方

Go 言語で返されるエラーの種類は正確には何ですか? Go 言語のソース コードを見ると、以下に示すように、エラー タイプが非常に単純なインターフェイス タイプであることがわかります。

 // エラー内部インターフェース型は、エラー状態を表現するための従来のインターフェースであり、nil値はエラーがないことを表します。
type error interface {
    Error() string
} 

エラー インターフェイスには、シグネチャ Error() 文字列を持つメソッドがあり、このインターフェイスを実装するすべての型をエラー型として扱うことができます。 Error() メソッドはエラーの説明を示します。fmt.Println を使用してエラーを出力する場合、Error() 文字列メソッドが内部で呼び出され、エラーの説明が取得されます。

一般に、関数がエラーを返す必要がある場合は、複数の戻り値の最後として error を使用します (ただし、これは必須ではありません)。

エラーを作成する最も簡単な方法は、errors.New 関数を呼び出すことです。この関数は、受信したエラー情報に基づいて新しいエラーを返します。サンプル コードは次のとおりです。

package main

import (
    "errors"
    "fmt"
    "math"
)

func Sqrt(f float64)(float64, err){
    if f <0 {
        return -1、errors.New( "math:square root of negative number"})
    }
    return math.Sqrt(f), nil
}

func main(){
    result、err:= Sqrt(-13)
    if err!= nil {
        fmt.Println(err)
    } else {
        fmt.Println(result)
    }
} 

操作の結果は次のようになります。

math: square root of negative number

上記のコードでは、errors.New を使用してエラー メッセージを返す方法を簡単に紹介します。他の言語の例外と比較して、Go 言語のメソッドは比較的簡単で直感的です。

カスタムエラータイプ

上記の error.New の使用法に加えて、error インターフェイスを使用して Error() メソッドをカスタマイズし、カスタム エラー メッセージを返すこともできます。

package main

import(
    "fmt"
    "math"
)

type dualError struct {
    Num     float64
    problem string
}

func(e dualError)Error()string {
    return fmt.Sprintf("Wrong!!!,because \"%f\" is a negative number", e.Num)
}

func Sqrt(f float64)(float64、error){
    if f<0 {
        return -1、dualError {Num:f}
    }
    return math.Sqrt(f)、nil
}
func main(){
    result、err:= Sqrt(-13)
    if err!= nil {
        fmt.Println(err)
    } else {
        fmt.Println(result)
    }
} 

操作の結果は次のようになります。

Wrong!!!,because “-13.000000” is a negative number

 

「 Go 言語エラー インターフェイス: エラー情報を返す」についてわかりやすく解説!絶対に観るべきベスト2動画

What’s the proper way to wrap errors in Go?
Error Handling in Golang [Beginners Guide to Go]