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