Go語言關於Type Assertions的疑問


我在"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 个解决方案

#1


x.(T)這樣的語法
這樣的語法只適應於x是interface類型

函數
func checkit(v interface{}){
    s,ok:=v.(string)
    fmt.Printf("%s:%b\n",s,ok)
}

相當於把參數轉換成了interface類型了

#2


看了哈 還能通過反射來搞定這個事情

          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")
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com