Go 語言關於 Type Assertions 的 坑

劍塵發表於2018-12-08

1.我在"The Go Programming Language Specification"中讀到了關於x.(T)這樣的語法可以對變數是否符合某一type或interface進行判斷於是我寫了如下的程式碼
Plain Text code
?
1
2
3
4
5
6
func main() {
v:="aaaaaa"
s,ok:=v.(string)
fmt.Printf("%s:%b\n",s,ok)

}

結果是悲催的編譯錯誤
Plain Text code
?
1
invalid type assertion: v.(string) (non-interface type string on left)

經過了一番搏鬥我將程式碼改為如下寫法
Plain Text code
?
1
2
3
4
5
6
7
8
func main() {
v:="aaaaaa"
checkit(v)
}
func checkit(v interface{}){
s,ok:=v.(string)
fmt.Printf("%s:%b\n",s,ok)

這樣的語法只適應於x是interface型別

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

相當於把引數轉換成了interface型別了

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章