我想调用我的函数测试并使用其中一个返回值。怎么说给我第一个或第二个价值?我认为下面会给我“一个”,但[1]
是错误的使用导致编译错误
package main
import (
"fmt"
)
func test() (int, string) { return 1, "one"; }
func main() {
i,sz:=test()
fmt.Printf("%d=%s\n",i,sz)
fmt.Printf("%s", test()[1]) //error
}
答案 0 :(得分:4)
据我所知,你不能下标函数返回值。你可以这样做:
_, someString := test();
fmt.Println(someString);
答案 1 :(得分:3)
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())
}