如何从多值返回函数访问单个值?

Go functions can return multiple values:

func f() (int, int) {
    return 2, 3
}

Is there any way to access individual values from such a multi-value returning function except assignment, i.e. suppose there is

func g(i int) {...}

is there is simpler way to write the following two lines?

_, i = f()
g(i)

My personal favorite would be g(f()[1]) but that's not possible either.

The current solution used by the standard library is to write simple helper functions which are dropping the unwanted return values. For example, take a look at the template package.

A lot of functions there return a (*Template, os.Error) tuple, but there is a helper called template.Must() which only returns a *Template and panics if the error isn't nil.

Alternatively, a general helper function like func extract(index int, values ...interface{}) interface{} might do the trick. But since there isn't support for generics yet, I wouldn't write something like that.

g(func(fst,snd int) int { return snd }(f()))

or defined snd

func snd(x, y int) int {
    return y
}
g(snd(f()))

or if function return array

func f() ([2]int) {
    return [2]int{2, 3}
}
g(f()[1])

There isn't a simpler way.

A possible solution would look for example like this:

g(f().1)

There is no syntactic support for a feature like this one in Go.

Use an anonymous struct instead of multiple return values.

func f() (struct{i,j int}) {
    return struct{i, j int}{2, 3}
}

func g(i int) { ... }

func main() {
    g(f().j)
}

Of course this only works when you are writing the function. Though you can wrap existing ones with this if you want.