【Go言語入門③】シンプルなエラーハンドリング

Go言語
目次

過去の記事

このシリーズはGoの公式ドキュメントに記載されている、チュートリアルを参考にしています。

チュートリアルの過去の記事をすすめた前提となっておりますので、ご了承ください。

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を元にエラーハンドリングするようです。

下記の記事が参考になります。

Errorハンドリング専用のモジュールを作って対応すれば、問題ないかと思います。

ぎゅう
WEBエンジニア
渋谷でWEBエンジニアとして働く。
LaravelとVue.jsをよく取り扱い、誰でも仕様が伝わるコードを書くことを得意とする。
先輩だろうがプルリクにコメントをして、リファクタしまくる仕様伝わるコード書くマン
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる