2014-06-27 44 views
2

我使用Go編程語言進行編程。如何將接口{}轉換爲[] int?

假設有一個包含整數數組的interface{}變量。如何將interface{}轉換回[]int

我已經試過

interface_variable.([]int) 

我得到的錯誤是:

panic: interface conversion: interface is []interface {}, not []int 
+2

你能否包括代碼? (ps:[] int不是整數數組,它是整數的一部分)。 –

+0

您需要使用範圍迭代接口{}的切片,並將斷言的整數複製到新切片中。 – elithrar

+0

向我們展示您嘗試過的方式,以便我們幫助您解決問題。 –

回答

7

這是一個[]interface{}不只是一個interface{},你通過它必須循環,並將其轉換:

http://play.golang.org/p/R441h4fVMw

func main() { 
    a := []interface{}{1, 2, 3, 4, 5} 
    b := make([]int, len(a)) 
    for i := range a { 
     b[i] = a[i].(int) 
    } 
    fmt.Println(a, b) 
} 
+0

當我做了'range a',編譯器說你不能迭代[] interface {} – user3534472

+0

你有什麼版本的go?鍵入'go version',它工作正常http://play.golang.org/p/R441h4fVMw – OneOfOne

2

正如其他人所說,你應該迭代切片並逐個轉換對象。 是更好地使用範圍內式開關,以避免恐慌:

a := []interface{}{1, 2, 3, 4, 5} 
b := make([]int, len(a)) 
for i, value := range a { 
    switch typedValue := value.(type) { 
    case int: 
     b[i] = typedValue 
     break 
    default: 
     fmt.Println("Not an int: ", value) 
    } 
} 
fmt.Println(a, b) 

http://play.golang.org/p/Kbs3rbu2Rw

+0

不必要的開銷,如果你知道它總是一個'[] int',也應該是'fmt.Println(「不是int:「,value)'。 – OneOfOne

+1

如果您知道它將始終是int的一部分,那麼無需從一片界面開始{}。在進行轉換或處理類型斷言時,測試項目是否是您期望的類型之一始終是最佳做法。我會編輯代碼,感謝您指出錯字。 – rvignacio

0

Func鍵返回值是接口{},但實際收益值是[]接口{},那麼試試這個相反:

func main() { 
    values := returnValue.([]interface{}) 
    for i := range values { 
     fmt.Println(values[i]) 
    } 
}