ホームページ > バックエンド開発 > Golang > Go の可変個引数関数でパラメーターのコンプライアンスを強制するにはどうすればよいですか?

Go の可変個引数関数でパラメーターのコンプライアンスを強制するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-07 19:12:14
オリジナル
635 人が閲覧しました

How Can I Enforce Parameter Compliance in Go's Variadic Functions?

Go の可変個引数関数でのパラメーター コンプライアンスの強制

Go 言語ではパラメーターを指定せずに可変個引数関数を使用できますが、そのようなシナリオを防ぐことが望ましい場合があります。それらを呼び出し元のコードの潜在的なバグとみなします。ただし、これをコンパイル時エラーとして発生させることは、この言語では直接サポートされていません。

解決策: 関数のシグネチャの変更

この制限を克服するには、次のように関数のシグネチャを変更します。非可変長パラメータと可変長パラメータの両方。このアプローチにより、関数の呼び出し中に少なくとも 1 つのパラメーターが指定されるようになります。例:

func min(first int, rest ...int) int {
    // Implement your logic here
    return 0
}
ログイン後にコピー

使用例

このシグネチャを使用すると、min 関数を次のように呼び出すことができます:

min(1) // Valid
min(1, 2) // Valid
min(1, 2, -3) // Valid
ログイン後にコピー

ただし、関数を呼び出そうとせずに関数を呼び出そうとすると、引数を指定するとコンパイル時エラーが発生します:

min() // Error: not enough arguments in call to min
ログイン後にコピー

2 つの可変個引数を使用した関数の処理パラメータ

少なくとも 2 つの引数を指定する必要がある場合は、関数シグネチャをさらに変更できます。

func min(first, second int, rest ...int) int {
    // Implement your logic here
    return 0
}
ログイン後にコピー

追加の考慮事項

この手法では、引数を効果的に強制します。少なくとも 1 つのパラメーターについて、トレードオフを比較検討することが重要です。具体的には、事前定義されたスライスを使用して関数を処理すると、以下に示すように、呼び出しコードに追加の手順が導入される可能性があります。

s := []int{1, 2, -3}
fmt.Println(min(s[0], s[1:]...))
ログイン後にコピー

代替アプローチ

関数のシグネチャの変更が不可能な場合、実行時パニックが発生するまたは、パラメータが指定されていない場合を処理するために終了メカニズムを使用できます。ただし、このアプローチではコンパイルを防ぐことはできず、実行段階での適切な処理に依存します。

以上がGo の可変個引数関数でパラメーターのコンプライアンスを強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート