Go で Sprintf に変数パラメータを渡す
Sprintf 関数で各変数を個別に指定するという面倒な作業を避けるために、複数のパラメータを 1 つのエンティティとして渡すことを可能にする技術。このアプローチは、質問に示されているように、かなりの数のパラメータが必要なシナリオに対応します。
この手法の鍵は、スライス v を []string ではなく []interface{} として宣言することにあります。 Sprintf 関数は、そのシグネチャに示されているように、その引数が []interface{} 型であることを期待します:
<code class="go">func Printf(format string, a ...interface{}) (n int, err error)</code>
v を []interface{} に変換することで、関数の期待と一致します:
<code class="go">s := []interface{}{"a", "b", "c", "d"} fmt.Printf("%5s %4s %3s\n", s[1], s[2], s[3]) v := s[1:] fmt.Printf("%5s %4s %3s\n", v...)</code>
このアプローチでは、「fmt.Printf への引数では v (type []string) を type []interface {} として使用できません」というエラーが発生せずに、目的の出力が生成されます。
while [] Interface{} と []string は変換できません。必要に応じて、[]string を []interface{} に手動で変換できます。
<code class="go">ss := []string{"a", "b", "c"} is := make([]interface{}, len(ss)) for i, v := range ss { is[i] = v }</code>
これらの手法に従うことで、開発者は変数パラメータを簡単に渡すことができますSprintf への移行により、コードの効率が向上し、個々の変数の指定に関連する定型文が削減されます。
以上がGo で複数の変数パラメータを Sprintf に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。