目次
過去の記事
このシリーズはGoの公式ドキュメントに記載されている、チュートリアルを参考にしています。
チュートリアルの過去の記事をすすめた前提となっておりますので、ご了承ください。
【Go言語入門①】macOSに環境構築して、Hello Worldを表示する
Go言語の環境構築方法をお伝えしていきます 【パッケージをダウンロード】 まずはGo言語の公式ドキュメントに移行し、パッケージをダウンロードします (Go言語のバージ…
【Go言語入門②】Go言語でモジュールを作成し、理解を深める
【前回の内容】 前回実施した内容を理解した前提なので、まずは下記をやってみてくださいね 【今回実施する内容】 このチュートリアルでは、2 つのモジュールを作成しま…
Go言語でエラーハンドリングする
errorsを追加する
errors
モジュールをimportして、エラーハンドリングしていきたいと思います。
greeting.goの内容を下記に変更します。
package greetings
import (
"errors"
"fmt"
)
func Hello(name string) (string, error) {
if name == "" {
return "", errors.New("empty name") // errorsを生成
}
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message, nil
}
Go言語は複数の値をreturnできるので、return される値の1つ目がmessage、2つ目にerrorを返すようにしています。
if name == "" {
return "", errors.New("empty name") // errorsを生成
}
greeting.goの内容を更新したので、Hello.goも下記の内容に更新します。
package main
import (
"fmt"
"log"
"example.com/greetings"
)
func main() {
log.SetPrefix("greetings: ")
log.SetFlags(0)
message, err := greetings.Hello("徹夜")
if err != nil {
log.Fatal(err)
}
fmt.Println(message)
}
この中で特徴的な部分はやはり、複数の返り値かと思います
message, err := greetings.Hello("徹夜")
returnされる順に変数に値を割り当てています。
実行してみる
message, err := greetings.Hello("")
if err != nil {
log.Fatal(err)
}
空文字を引数に渡して、実行してみます
$ go run .
greetings: empty name
exit status 1
期待値通りerrors.New("empty name")
のメッセージが表示されました。
逆に名前を入れてあげると
$ go run .
Hi, 徹夜. Welcome!
無事に出力されましたね
Go言語にtry catchは存在しない
はじめは驚いたのですが、Go言語にはtry catchが存在しません。
そのため、返り値でreturnされたerrorを元にエラーハンドリングするようです。
下記の記事が参考になります。
Go言語のエラーハンドリングについて – Qiita
皆さまゴールデンウィークはいかがお過ごしでしょうか。GW前に投稿しようと下書きにちまちま書き溜めていた本記事ですが、スマホで誤ってゴミ箱ボタンを押してしまったがた…
Errorハンドリング専用のモジュールを作って対応すれば、問題ないかと思います。
コメント