ホームページ > バックエンド開発 > Golang > Go の `fmt.Println` は関数からの複数の戻り値を直接処理できますか?

Go の `fmt.Println` は関数からの複数の戻り値を直接処理できますか?

Susan Sarandon
リリース: 2024-12-15 07:57:14
オリジナル
288 人が閲覧しました

Can Go's `fmt.Println` Handle Multiple Return Values from a Function Directly?

Go で複数の戻り値を可変個引数関数に渡す

質問:

関数を使用できますか複数の整数値を返す場合は、フォーマットされた文字列の場合は fmt.Println() に直接渡されます。 Python に似た出力ですか?

func temp() (int, int) { return 1, 1 }
fmt.Println("first= %d and second = %d", temp()) // Not supported
ログイン後にコピー

答え:

いいえ、これは Go のデフォルトでは直接サポートされていません。言語仕様によれば、「Calls」は ...interface{} のような可変個引数パラメータの唯一の引数として関数呼び出しを想定しており、関数には少なくとも 1 つの戻り値が必要です。

fmt.Printf(),ただし、可変個引数パラメーターと一緒にフォーマット文字列を使用できるため、このタスクにより適しています。ただし、temp() はタプルを返すため、...interface{} 引数として直接渡すことはできません。

解決策:

複数の戻り値を渡すには可変個引数関数に変換するには、ユーティリティ ラッパー関数を使用してタプルを []interface{} スライスに変換し、可変個引数として渡すことができます。以下は実装例です。

func wrap(vs ...interface{}) []interface{} {
    return vs
}
ログイン後にコピー

このラッパー関数を使用すると、temp() 関数を fmt.Printf() に渡すことができます。

func main() {
    fmt.Printf("first= %v and second = %v", wrap(temp()...)...)
}
ログイン後にコピー

これにより、 temp() の値。

以上がGo の `fmt.Println` は関数からの複数の戻り値を直接処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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