簡體   English   中英

在Golang中,我可以將切片值指定為返回值嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM