複数の値を返す
Go (コンパイル言語の場合) の非常に特殊な機能は、関数とメソッドが複数の値を返すことができることです。 (Python と Perl も動作します)。
これを使用すると、C プログラムの多くの悪い規則、つまりパラメーターを変更してエラーを返す (たとえば、EOF に遭遇した場合に -1 を返す) を改善することができます。 Go では、Write はカウント値とエラー「はい、いくつかのバイトを書き込みましたが、デバイス例外のためすべてが書き込まれませんでした。」を返します。
*os パッケージの File.Write は次のように宣言されます:
func (file *File) Write(b []byte) (n int, err error)
ドキュメントに記載されているように、書き込まれたバイト数を返し、 n != len(b) の場合は、を返します。 nil 以外のエラー。これは Go では一般的なアプローチです。タプルはネイティブ型として表示されないため、複数の戻り値が最適な選択となる可能性があります。特定のエラー信号に対してフィールド空間をオーバーロードすることなく、必要な値を正確に返すことができます。
名前付き戻り値
Go 関数の戻り値または結果パラメーターには、名前を割り当てて、入力パラメーターと同じように元の変数のように使用できます。名前が付けられている場合は、関数の先頭でその型のゼロ値で初期化されます。関数がパラメーターを追加せずに return ステートメントを実行した場合、結果のパラメーターが返されます。この機能を使用すると、(再び) 少ないコードでより多くのことを実行できるようになります。
名前は必須ではありませんが、名前を付けるとコードがより堅牢かつ明確になります。ドキュメントはこちらです。たとえば、int 型の nextPos 戻り値に名前を付けると、どれがどの値を表すかを示すことができます。
func nextInt(b []byte, pos int) (value, nextPos int) { /* ... */ }
名前付きの結果は初期化され、未変更の戻り値に関連付けられるため、非常に単純かつ明確になります。これは、非常によく使用される io.ReadFull コードの一部です:
func ReadFull(r Reader, buf []byte) (n int, err error) { for len(buf) > 0 && err == nil { var nr int nr, err = r.Read(buf) n += nr buf = buf[nr:len(buf)] } return }
推奨される関連記事とチュートリアル: golang チュートリアル
以上がgolangで戻り値が多すぎる問題の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。