我正在尝试开发一个passthrough函数来进行错误检查,其中评估某些参数,然后返回其余参数。但我希望这些作为多个返回值而不是切片返回。在Go中有什么办法吗?这是一个例子:
func Check(args ...interface{}) ...interface{} {
last := len(args) - 1
err := args[last]
// Check for an error in the last argument
if err != nil {
panic(err)
}
// Return any args returned by the function we're checking
return ...args[:last]
}
我知道这在函数声明中并没有完全形成。这只是为了争论。理想情况下,我希望能够返回可变数量的值,然后可以通过赋值在另一侧接收。当我想使用标准的错误/恐慌习惯时,这将允许简单的内联错误检查。
我知道我可以返回切片然后将其分配给各个变量,或者我可以创建多个这样的函数(例如Check0,Check1,Check2等),每个函数都有不同的数字或者返回值,但这些解决方案都不是很优雅。关于如何使这样的东西优雅地工作的任何想法?或者在Go的这个阶段是不可能的?
在相关的说明中,是否有人知道是否有计划将切片解包为变量,如下所示?
one, two, three := []string{"one", "two", "three"}
答案 0 :(得分:1)
你不能这样做,我认为这甚至没有计划,这对IMO来说是件好事。
您的选择是做这样的事情(这很难看,不应该使用):
func Check(args ...interface{}) []interface{} {
if err := args[len(args)-1]; err != nil {
//do suff with err
}
args = args[:len(args)-1]
return args
}
func Check2i(args ...interface{}) (int, int) {
return args[0].(int), args[1].(int)
}
func main() {
fmt.Println(Check(10, 20, 30, nil)...)
a, b := Check2i(Check(10, 20, nil)...)
_, _ = a, b
}