switch 里的type assertion 的值的疑问

来源:6-4 接口的值类型

weibo_隱懓_0

2018-02-21

func test(a interface{}) {
   switch v := a.(type) {
   case string:
      fmt.Println(v, "is string")
   case int:
      fmt.Println(v, "is int")
   }
}
func main() {
   
   test("hello world")
   test(1)
}

如上所示,case 先判断v的类型 ,这时候v的值是string, int. 但是到里面的打印的时候 怎么v又变成了 传递的变量的值。


写回答

2回答

红雀

2018-02-21

 v := a.(type)是表示转化为type对象类型的值

case string 表示一个过程 并不是判断条件 经过该过程 尝试是否能转换为string型如果不能则(丢弃错误)进入下一个case 所以这里的v从来都不是 string,int

2
2
光荣交白卷哥
忍不住赞你一下,我看视频里面的r.(type)始终不懂这个语法的含义是什么,这节课的视频看的也是迷迷糊糊,但是看到你的解释以后我好像看懂了这节课了
2018-03-05
共2条回复

ZoneTw

2020-03-31

就只是固定用法, 沒有甚麼好糾結的 XD (我也是這個地方卡到)

https://tour.golang.org/methods/16


0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程