[英]In Golang, can I assign slice values as return values?
我正在嘗試開發一個傳遞函數來進行錯誤檢查,其中評估了某些參數,然后返回了其余參數。 但我希望將它們作為多個返回值而不是切片返回。 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習慣用法時,這將允許簡單的內聯錯誤檢查。
我知道我可以代之以返回切片,然后將其部分分配給各個變量,或者我可以創建多個此類函數(例如Check0,Check1,Check2等),每個函數都有不同的數字或返回值,但是這兩個都不解決方案非常優雅。 關於如何使此類內容正常運行的任何想法? 還是在Go的現階段是不可能的?
與此相關的是,有誰知道是否有任何計划使切片無法打包成變量,如下所示?
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.