プログラミング言語 Go のより便利な機能の 1 つは、エラーを処理する方法です。 他のプログラミング言語のように Try/Catch メソドロジーを使用するのではなく、Go はエラーを通常の戻り値として扱います。
シンプルなモジュールを作成し、いくつかのロギングルールを適用することで、開発プロセス中にあらゆる種類の例外をキャッチするための有用なエラーメッセージを生成できます。
この記事では、Golangがこれらの例外を見つけて処理する最も基本的な方法のいくつかを取り上げます。
Golangの基本的なエラー処理
Goでエラーを捕捉するには、必要なパラメータが満たされない条件をチェックする簡単なif/then文を使います。
文字列に値が含まれるかどうかをチェックするために作成できる基本的なモジュールを見てみましょう。
「hello」という名前のパッケージを作成し、エラーとフォーマットされたテキストを認識するために標準の「errors」と「fmt」モジュールをインポートします。
package helloimport ("errors""fmt")
そして、名前の付いた変数に対してテキスト文字列を返すモジュールを作成することができます。
func Hello(name string) (string, error) {if name == "" {return "", errors.New("No name was given")}
上記では、変数「name」に対して空文字列が返されたかどうかを確認し、指定したテキストで新しいエラーを返します。 これがエラー条件です。 エラー条件は、エラーそのものが存在するかどうかを確認します。
条件を満たさない場合(つまり、エラーがない場合)、指定した「name」変数に一致する値を返します。
message := fmt.Sprintf("Hi, %v. Welcome!", name)return message, nil}
メッセージと「nil」という値、つまりエラーがないことを返すことに注意してください。
次に、実際のスクリプトでこのパッケージをどのように呼び出すかを見ていきましょう。
test.goという新しいスクリプトを作ってみましょう
Golangの常として、スクリプトはパッケージを “main” として定義することから始めなければなりません。
package mainimport ("fmt""log""yoursite.com/hello")
以下ではmain関数を定義し、わかりやすいプレフィックスを作成するためにロガーにいくつかのプロパティを設定し、(セキュリティ上の理由から)時間、ソースファイル、行番号を表示しないようにフラグを作成しています。
func main() {log.SetPrefix("Hello: ")log.SetFlags(0)
次に、表示するメッセージを指定します。
message, err := hello.Hello("")
最後に、エラーがあるかどうかを確認するために、err が “nil” と等しくないかをチェックします。
if err != nil {log.Fatal(err)}
エラー状態が存在しない場合、単に hello パッケージで定義されたメッセージを表示します。
fmt.Println(message)}
これをテストするために、コードをそのまま実行することができます。 実行すると、次のような結果が得られます。
>go run test.gogreetings: No name was givenexit status 1
もし test.go スクリプトを修正したい場合は、次のようなものを入力します。
message, err := hello.Hello("John")
出力は次のようになります。
>go run test.goHi, John. Welcome!
返すことができる別のタイプのエラー メッセージは、
fmt.Errorf – Printf の規則に従って文字列をフォーマットするものです。
Golangで整数を扱う
もちろん、文字列エラーはエラーの1つのタイプに過ぎません。 Golangのエラーハンドリングでは、コードでチェックできる他のいくつかのエラーがあります。 特に知っておくべきなのは数値エラーです。
Goでは整数を扱うのは簡単です。
ゼロで割った場合のような数値エラーがあるとします。 まず、2つの変数xをyで割る「Division」関数を作成します。if/then条件の最初の部分で、yがゼロでないことを確認する必要があります。
func Division(x int, y int) (int, error) {if y == 0 {return 0, errors.New("Thou shalt not divide by zero!")} else {return (x / y), nil}}
これが主関数です。 さて、この関数に2つの変数を渡すことができます。
func main() {if result, err := Division(12, 0); err != nil {fmt.Println("We got an error: ", err)} else {fmt.Println("The answer is", result)}}
そして、次のようなメッセージが表示されます:
“エラーが発生しました。 Thou shalt not divide by zero!”
これはGolangのエラーハンドリングを使って数値のエラーを見つける方法の一例に過ぎません。
Finding HTTP Status Errors
Golangでは、呼び出しているAPIがHTTPステータスエラーを出している場合、それを表示することができます。
その方法は以下の通りです:
まず、新しいパッケージ “net/http “をインポートしましょう:
import ( "fmt" "log" "net/http")
メイン関数で、アプリ(例えばウェブサイト)を呼び、どんなエラーでもログに記録しましょう。 成功したリクエストは 2xx の範囲に収まることがわかっているので、この範囲外の HTTP エラーを検出するそれぞれのステータスを作成します。 これは、次のように行うことができます。
func main() { resp, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode)) if resp.StatusCode >= 200 && resp.StatusCode
ご覧のとおり、メイン関数は
>= 200 && resp.StatusCode <= 299
2xx 範囲にある HTTP リクエストかどうかを確認するように設定されています。 リクエストがこの条件を満たしていない場合、エラーメッセージが表示されます。
たった1つのモジュールで、Golangコードを発見し修正するために必要なすべての情報を素早く集めることができます。
まとめ
このガイドは、Go言語がどのようにエラーを処理するように設計されているかについて、表面を削ったにすぎません。 しかし、文字列の存在を確認する方法、非論理的な数値文が提示された場合にエラー条件を発生させる方法、および応答のHTTPステータスコードを確認する方法などの基本はすべて、Golangエラー監視の旅を始めるのに素晴らしい場所です。
これらのGolangエラー処理技術を手動で確認し使用する時間がないのですか。 そこで、Airbrake Error Monitoringのようなツールが役に立ちます。 Airbrake Error Monitoringを使えば、個々のモジュールを作成する必要なく、迅速にエラーを見つけることができるでしょう。 Airbrake Error Monitoringを30日間無料で試して、無制限のエラーとパフォーマンス・イベントを確認してください。