引用Go 语言规范:
形式的主要表达式a[x]
表示由 x 索引的数组、切片、字符串或映射 a 的元素。值 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())
}