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

标签 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

最佳答案

使用空白标识符_:

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 { }

关于go - 从具有多个返回值的函数调用中仅获取特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735432/

相关文章:

go - 如何调试用golang编写的死锁进程

time - 可空时间.Time

oop - 导入的结构方法不起作用

go - 是否可以使用 Google Classroom Go API 来评论事物?

file - 如何使用golang检查网页文件是否存在?

go - 文件上传到 s3 但不可见

unit-testing - 真正的单元测试总是可以并行运行吗?

Go编程语言 slice 从头开始

Golang 类型别名(类型 SampleType otherType !== otherType)?

go - 测试使用var声明来模拟结果的函数