从具有多个返回值的函数调用中仅获取特定值?

时间:2014-05-19 10:29:57

标签: go

给定swap,一个返回多个值的函数,假设它是某些API的一部分,我无法修改:

package main

import "fmt"

func swap(x, y string) (string, string) {
    return y, x
}

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}

是否可以使用swap函数并仅获取第一个返回值,丢弃第二个值?我试过这个:

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a)
}

ERROR: prog.go:10: b declared and not used [process exited with non-zero status]

这也是不可能的:

a := swap("hello", "world")

ERROR: prog.go:10: multiple-value swap() in single-value context

当我不需要所有返回的部分时,如何处理返回多个值的函数?


代码基于" A tour of go - lesson 9"

1 个答案:

答案 0 :(得分:9)

使用空白标识_

a, _ := swap("hello", "world")

分配给空白标识符的所有内容都会被静默丢弃而不会引发警告。您还可以使用空白标识符向结构添加填充:

struct {
    a byte
    b byte
    c byte
    _ byte // padding
}

空白标识符的另一种用法是在初始化全局变量时丢弃返回值:

var foo, _ = foo.NewFoo() // ignore error returned by NewFoo()

当只需要一个范围的值时:

for _, v := range mySlice { }