使用一个返回值?

时间:2013-06-25 18:41:24

标签: go

我想调用我的函数测试并使用其中一个返回值。怎么说给我第一个或第二个价值?我认为下面会给我“一个”,但[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
}

2 个答案:

答案 0 :(得分:4)

据我所知,你不能下标函数返回值。你可以这样做:

_, someString := test();
fmt.Println(someString);

答案 1 :(得分:3)

引用Go Language Specification

  

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())
}