Go言語仕様の引用:
形式の一次式は、a[x]
x でインデックス付けされた配列、スライス、文字列、またはマップの要素を示します。値 x は、それぞれインデックス キーまたはマップ キーと呼ばれます。[...] それ以外の場合 [a が配列、スライス文字列、またはマップでない場合] a[x] は不正です。
ただし、Go の複数の戻り値は返される配列ではなく、別の言語機能です。配列は単一の型の要素しか保持できませんが、戻り値は異なる型になる可能性があるため、これはそうである必要があります。
しかし、戻り値は配列 (またはスライス、文字列、またはマップ) ではないため、a[x]
言語仕様によると、構文は構文エラーです。その結果、@dav がすでに正しく述べているように、他の場所で使用するには、実際に戻り値を変数に割り当てる必要があります。
特殊なケースでは、変数の割り当てを避けるために、このちょっとしたトリビアを使用できる場合があります。
特殊なケースとして、関数またはメソッド g の戻り値の数が等しく、別の関数またはメソッド f のパラメーターに個別に割り当て可能な場合、呼び出し f(g(parameters_of_g)) は、戻り値をバインドした後に f を呼び出します。 g の f のパラメーターに順番に。
これにより、次のことが可能になります。
func foo() (int, string) {
return 42, "test";
}
func bar(x int, s string) {
fmt.Println("Int: ", x);
fmt.Println("String: ", s);
}
func main() {
bar(foo())
}