2016-08-01 12 views
1

私は新しいです - ちょうどそれで遊んでいます - しかし、コマンドラインツールを書いた - 私は約30種類の関数を呼び出すreturn x, err。どのような場合でも、私がしたいことは、エラーがあればパニックになります。基本的にすべてが完璧に動作するか、すべてが失敗します。ゴランでタイプジェネリック(テンプレート)関数を作ることが可能です

私はtemplate.Must(t Template*, err Error) Template*があることを知っています。私はcheck(something interface{}, err Error) interface{}を作ることができますが、それを使用するにはタイプキャストを行う必要があります。これは厄介です。

は私が

x := panicIfError(ioutil.ReadFile(fileName)) 

ような何かを行うことができ、xは右のタイプで出てきたpanicIfErrorような一般的な機能のようなものを作るためにどのような方法でそれは可能ですか?

(多くの人が同じ行に置いているのを見たことがありますが、あまりにも多くの読みやすさを犠牲にしています。現在私の唯一の解決策は、使用しているすべての単一のタイプに対して、panicIfErrorのオーバーロードを行うことです。理想的)

答えて

0

interface{}の値を返すように宣言するだけですが、それはあなたが探しているものではありません(他のタイプの値を取得するにはtype assertionが必要です)。

panicIfError()関数が異なる具体的な型を返すようにします。これはGoでは不可能です。

私は、現時点では何をやったか、実際のですFAQ: Why does Go not have generic types?

+0

で関連トピックを参照してください - リターン・インタフェース{}とちょうど型アサーションに私はそれを行うたびに追加 - すべての悪のうちの少なくともです。醜い、醜いですが、if複合文と同じように醜いものではありません! :) –

関連する問題