PHP の可変パラメータ関数は、関数定義で無限の数のパラメータを使用できる非常に便利な関数です。ただし、可変引数関数で書式設定ディレクティブを使用する必要があるかどうかは、特定のニーズによって異なります。フォーマット命令は通常、パラメーターを特定のフォーマットで出力または処理するために使用されます。たとえば、printf() 関数を使用する場合は、フォーマット文字列を指定する必要があります。可変パラメーター関数のパラメーターを書式設定する必要がある場合は、当然ながら書式設定命令を使用する必要があります。ただし、単にパラメータを他の関数に渡したり、基本的な操作を実行したりするだけの場合は、フォーマット命令を使用する必要はありません。つまり、可変個引数関数で書式設定命令を使用する必要があるかどうかは、特定のビジネス要件によって異なります。
いくつかの位置引数を受け取り、最後に any
スライスを伝播する可変個引数関数 respond
があります。この関数は、コンテキストに応じて最後のパラメーターを異なる方法で使用します (message
と data
が status
の値に応じてどのように異なるかに注意してください):
次の呼び出しに対して警告が表示されません:
リーリー ただし、次の警告では、引数を指定して respond が呼び出されますが、書式設定ディレクティブ
は発生しません (ただし、コードは期待どおりに実行されます。person
は です)構造体
) :
私の素人目には、 可変個引数関数は最後にフォーマット文字列とそのフォーマットの引数 を期待しているように見えます。しかし、なぜそうなるのでしょうか?可変個引数関数で実行できる内容に制限はありますか?
それとも、responder
を 2 つの部分 (「ok」と「not ok」) ごとに 1 つずつ分割したほうがよいでしょうか?
議論については https://github.com/golang/go/issues/26486 および https://go.dev/src/cmd/vet/testdata/print/print.go (行 316) も参照してください。 このメッセージgo コード内 (@mkopriva と @jimb がコメントで述べているように、リンターから警告が表示されます)
警告はリンターから来ています。 respond()
関数を呼び出すときに使用される関数が、その後に指定された引数と一致しません。
この特定のメッセージは、ログを記録する printf パーサー からのものです:
printf: printf フォーマット文字列とパラメータの一貫性を確認します
このチェックは、fmt.printf や fmt.sprintf などの書式設定関数の呼び出し、 およびこれらの関数に対して検出されたラッパー に適用されます。
response()
関数は、format
および a
パラメーターを使用して fmt.sprintf()
をそのまま呼び出すため、これは次のようになります。これを fmt.sprintf()
のラッパーとして考えてください。
この警告メッセージを回避または削除したい場合、最も簡単な「修正」は、これらのパラメータをそのまま使用しないことです。たとえば、パラメータの 1 つをコピーして、それを渡します。 リーリー
以上が可変引数関数には書式設定ディレクティブが必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。