cannot convert (type interface {}) to type int: need type assertion
阿新 • • 發佈:2018-12-01
問題:
在使用interface表示任何型別時,如果要將interface轉為某一型別,直接強制轉換是不行的,例如:
var t interface{} = "abc"
s := string(t)
1
2
3
4
cannot convert t(type interface {}) to type string: need type assertion
golang 任何型別interface{}
cannot convert (type interface {}) to type int: need type assertion
golang中可以使用interface{}表示任何型別。
本文以例子的形式,演示interface{}的使用。
example1
package main import ( "fmt" ) func main() { var t1 interface{} = 2 v, ok := t1.(int) if ok { fmt.Println("int:", v) } else { fmt.Println("v:", v) } }
- output:
$ ./test
int: 2
判斷interface的型別,如果是int型,就輸出介面表示的值。
有時,如果確定知道型別T(例如int),會直接使用如下方式進行斷言:
v := t1.(int)
- 1
但斷言失敗,會panic。可根據具體情況選擇使用哪種方式。
example2
package main import ( "fmt" ) func main() { var t1 interface{} = "abc" switch v := t1.(type) { case int: fmt.Println("int:", v) case string: fmt.Println("string:", v) default: fmt.Println("unknown type:", v) } }
如果t1為abc:
output:
$ ./test
string: abc
如果t1為23:
output:
$ ./test
int: 23
如果t1為1.2
output:
$ ./test
unknown type: 1.2