Go语言关于Type Assertions的疑问

啤酒沫 2013-08-29 09:34:05
我在"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)
}

于是运行成功
然后我冷静下来思考这个问题为毛呢......

谁能给我解释一下
...全文
564 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
十一文 2013-08-30
  • 打赏
  • 举报
回复
看了哈 还能通过反射来搞定这个事情 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") }
十一文 2013-08-30
  • 打赏
  • 举报
回复
x.(T)这样的语法 这样的语法只适应于x是interface类型 函数 func checkit(v interface{}){ s,ok:=v.(string) fmt.Printf("%s:%b\n",s,ok) } 相当于把参数转换成了interface类型了

2,348

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • 俺叫西西弗斯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧