質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

222閲覧

Golangのエラーの扱いについて

johejo

総合スコア12

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2017/07/27 18:34

編集2017/07/27 18:36

#前提
Golangを学んでいます。
エラーの扱いについて二つ気になった点があります

  1. 戻り値とerrorを返す関数を使用する際はエラーのチェックの他に戻り値のチェックもするべきなのでしょうか。
  2. 関数を作成する場合、エラーの処理を行ったのちエラーであれば戻り値だけでなく確認したエラーも返すように設計するべきでしょうか。

一般的にはどのように記述するのが望ましいのでしょうか。

#ソースコード(1. について)

Go

1//中略 2f, err := os.OpenFile(filename, os.O_WRONLY, 0666) 3 4if err != nil { 5 fmt.Fprintf(os.Stderr, "Openfile error") 6} 7 8//このチェックはする必要がないのか? 9if f == nil { 10 fmt.Fprintf(os.Stderr, "file pointer error") 11} 12 13 14

#ソースコード(2. について)

Go

1//errorも返す場合 2func hoge () (int error) { 3 n, err := foo() 4 if err != nil { 5 fmt.Fprintf(os.Stderr, "foo error") 6 return -1, err 7 } 8 return n, err 9} 10 11//errorは返さない場合 12func fuga () (int) { 13 n, err := foo() 14 if err != nil { 15 fmt.Fprintf(os.Stderr, "foo error") 16 return -1 17 } 18 return n 19} 20 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

何を目的にするか?によりますが、必要無いなら省けます

if _, err := os.OpenFile(filename, os.O_WRONLY, 0666); err != nil { panic("Openfile error") }

isXXX系の処理なんかは、isXXXを取得しようとする場合に結局のところ、詳細まで取得する必要がある場合もあるので、詳細も取得出来るしisXXXの代わりに使用出来るし一石二鳥かと思います

errorsでエラーを生成出来たと思うので、-1とか返さずにエラーを生成すると良いかと思います。

import "errors" func hoge () (int error) { n, err := foo() if err != nil { err = errors.New("foo error") } return n, err }

というか、このケースの場合はそのまま返した方が良いのでは?

func hoge() (int error) { return foo() }

投稿2017/07/28 00:37

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

johejo

2017/07/28 20:52

回答ありがとうございます。 複雑なロジックでネストが深い場合は、最深部で発生したエラーをどんどんたらい回して上位まで返すよりは新たにアラーを生成したほうがわかりやすいということでしょうか。 勉強不足で申し訳ありません。 精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問