LoginSignup
5
5

More than 5 years have passed since last update.

どうしてもGoでTryCatchしたい人のためにtrycatch作った

Last updated at Posted at 2014-05-04

以前Gunosyのサーバを全部Goに置き換えてる時に、同僚から「Goってtry-catchないの」みたいな話が出ました。
その時はそんなもの必要ないと返したんですが、せっかくゴールデンウィークなのでふざけたものつくろうと思い寝起きの10分位で適当なtry-catch実装作りました。

作ったもの

こちらです。
trycatch https://github.com/y-matsuwitter/trycatch

インストールは go get github.com/y-matsuwitter/trycatch

使い方

trycatch.go
package main

import "github.com/y-matsuwitter/trycatch"

type MyError struct {
    error
}

func main() {
    trycatch.TryCatch{}.Try(func() {
        println("do something buggy")
        panic(MyError{})

    }).Catch(MyError{}, func(err error) {
        println("catch MyError")

    }).CatchAll(func(err error) {
        println("catch error")

    }).Finally(func() {
        println("finally do something")

    })
    println("done")
}

実行結果

$ go run trycatch.go
do something buggy
catch MyError
finally do something
done

注意点として、Try、Catchなど呼んだあと、Finallyを呼ばないと例外をキャッチしてくれないです。
なんか上手い書き方思いついたら改善してみる。

最後に

今のところ、try-catchが用意されていないことで問題になったことは特にないし、自分はこれ使わないだろうと思いました。
あと、Goとtry-catchの話、以前twitterでもちょいちょいネタに上がってますね(参考:mattnさんのブログ記事)。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5