我想调用函数测试并使用返回值之一。我怎么说第一或第二个值?我以为以下内容会给我“一个”,但[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
}
引用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())
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句