4

Guava Preconditionsを使用すると、Java のメソッド パラメーターを簡単に確認できます。

public void doUsefulThings(Something s, int x, int position) {
    checkNotNull(s);
    checkArgument(x >= 0, "Argument was %s but expected nonnegative", x);
    checkElementIndex(position, someList.size());
    // ...
}

これらのチェック メソッドは、条件が満たされない場合に例外を発生させます。

Go には例外はありませんが、戻り値でエラーを示します。ですから、上記のコードの慣用的な Go バージョンはどのようになるのだろうかと思います。

4

2 に答える 2

2

それは文脈に依存します。

doUsefulThingsがパッケージからエクスポートされたパブリック関数である場合、 を返しますerror。返すことができるパッケージレベルの変数をエクスポートすることがerrorでき、呼び出し元は、返さerrorれたものが文書化された失敗の方法のいずれかと等しいかどうかを確認できます。

それがエクスポートされておらず、それを間違って呼び出すのはプログラマーのエラーになる場合は、panic(errors.New("bla bla bla")). とにかく、そのポインターを逆参照すると、関数はパニックになりますが。

このために:checkArgument(x >= 0, "Argument was %s but expected nonnegative", x)を渡すことができますuint

于 2012-09-24T15:49:25.620 に答える
0

パラメータの基本的なプロパティをチェックするためにアサーションを使用することが言語の哲学にあるかどうかはわかりません。

バグがなくても実際に無効な値を持つ可能性のあるパラメーターの場合 (たとえば、データベースで見つからない場合)、エラーが返されます。

func doUsefulThings(s *Something) error {
      // return an error if your algorithm detect an invalid value

そうでsはないnilことを主張すると、冗長性が増すだけです。提供されていないことを確認しても意味がありませんnil

戻りパラメータを追加すると、特にerrorすべてのユーザーがこのエラーをチェックするようになります。呼び出し元コードの些細なバグから身を守るために、関数にコードを記述しないでください。呼び出し元は、関数を呼び出す前に、コードの残りの部分に応じて可能であればnil、そうでないことを単にテストする必要があります。

于 2012-09-24T15:49:18.117 に答える