我在"The Go Programming Language Specification"中讀到了關於x.(T)這樣的語法可以對變量是否符合某一type或interface進行判斷於是我寫了如下的代碼
func main() {
v:="aaaaaa"
s,ok:=v.(string)
fmt.Printf("%s:%b\n",s,ok)
}
結果是悲催的編譯錯誤
invalid type assertion: v.(string) (non-interface type string on left)
經過了一番搏斗我將代碼改為如下寫法
func main() {
v:="aaaaaa"
checkit(v)
}
func checkit(v interface{}){
s,ok:=v.(string)
fmt.Printf("%s:%b\n",s,ok)
}
於是運行成功
然后我冷靜下來思考這個問題

為毛呢......
誰能給我解釋一下
2 个解决方案
x.(T)這樣的語法
這樣的語法只適應於x是interface類型
函數
func checkit(v interface{}){
s,ok:=v.(string)
fmt.Printf("%s:%b\n",s,ok)
}
相當於把參數轉換成了interface類型了
看了哈 還能通過反射來搞定這個事情
x := 34545
var t = reflect.TypeOf(x)
switch t.Kind() {
case reflect.Int:
fmt.Println("x is int")
case reflect.Float64:
fmt.Println("x is float64")
}