gpt4 book ai didi

go - 在 Golang 中,我可以将 slice 值分配为返回值吗?

转载 作者:IT王子 更新时间:2023-10-29 02:17:03 26 4
gpt4 key购买 nike

我正在尝试开发一个直通函数,用于在评估某些参数并返回其余参数的地方进行错误检查。但我希望这些作为多个返回值而不是一个 slice 返回。有什么办法可以在 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]
}

我知道函数声明中的格式不正确。这只是为了争论。理想情况下,我希望能够返回可变数量的值,然后可以通过赋值在另一端接收这些值。当我想使用标准的 err/panic 习惯用法时,这将允许进行简单的内联错误检查。

我知道我可以返回 slice ,然后将其部分分配给各个变量,或者我可以创建多个这样的函数(例如 Check0、Check1、Check2 等),每个函数都有不同的数字或返回值,但是这些解决方案都不是很优雅。关于如何使这样的事情优雅地工作的任何想法?或者在 Go 的这个阶段是不可能的?

在相关说明中,有谁知道是否有任何计划将 slice 解压缩为变量,如下所示?

one, two, three := []string{"one", "two", "three"}

最佳答案

你不能那样做,我认为这甚至都没有计划,这对 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
}

关于go - 在 Golang 中,我可以将 slice 值分配为返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25208663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com