• qinsi
    2021-12-04
    type switch里的 switch v := x.(type) { 看上去像是一个初始化语句,但其实是一个type guard,所以后面没有分号。如果有初始化语句的话就是这样的: switch a:= f(); v := x.(type) { 另外type switch里是不能fallthrough的

    作者回复: 👍

    
    35
  • 江楠大盗
    2022-02-12
    文中说x.(type)这种表达式形式是 switch 语句专有的,但是类型断言也可以这么写,所以不应该是专有的吧?

    作者回复: 只有switch表达式可以用x.(type),类型断言的格式是类似像x.(*int)的形式,类型断言后面括号里必须是某个具体的类型。而switch表达式的x.(type)就是x.(type)。

    共 2 条评论
    13
  • lyy
    2022-02-06
    个人感觉fallthrough,执行完 case1 后,继续case2里面的代码,而不用判断case2的条件是否成立,这一点设计的并不好,估计很多人会理解为继续判断case2条件

    作者回复: 但是如果按你的设计,fallthrough后,先要判断下一个case的条件,那么fallthrough的意义就不存在了,因为下一个case的条件求值后基本不会是true。

    共 4 条评论
    8
  • 文经
    2021-12-24
    白老师,我这样理解对不对: x.(type) 如果没有 := 符号的话,这个表达式是获取x的具体类型 v := x.(type), 这个则是把x从具体的接口类型中获取它实际类型的值。 x.(SomeType), 则是判段x是否遵守SomeType接口,并转化为具体类型的值。 所有的这些行为都是编译器把它转化为相应的代码。

    作者回复: 差不多。

    
    3
  • lesserror
    2021-11-26
    Tony Bai 老师的文章讲解的非常细致,鼓掌。 想问一下老师,文中的内容基本都能理解,但是过一段时间就遗忘比较多了,尤其是后面的内容涉及到前面的知识时。希望老师在这门课中搞个小型的实战项目,能把前面的知识串在一起就好了。 这样,不会觉得纸上得来终觉浅......

    作者回复: 后续会有实战项目,尽量串联吧。

    共 3 条评论
    3
  • plh
    2023-05-28 来自四川
    switch 太灵活,即使有经验的go开发者也容易犯错. 看过好几篇文章,这个地方是讲的最全面,最清晰的.

    作者回复: 👍

    
    1
  • qiutian
    2022-06-01
    哪来的case2呢

    作者回复: 在这个case中: case case2_1(), case2_2(): println("exec case2")

    共 2 条评论
    1
  • peison
    2022-04-09
    我想请教一下,文中type switch中的 v:=x.(type)后面,为什么switch中的case分支,不是和x.(type)的返回值v做比较?那实际上case分支是和什么值做比较

    作者回复: type switch是go的一种比较特殊的语法。能运用该语法的x.(type)中的x必须是interface类型。 case分支是用某类型与x的动态类型作比较。而v := x.(type)中的v存储的是转换后对应的动态类型的值。

    
    
  • ps Sensking
    2022-01-22
    我们要注意的是只有接口类型变量才能使用 type switch,并且所有 case 语句中的类型必须实现 switch 关键字后面变量的接口类型。 您好这个例子用interface 里面只要实现一个 int 或者 string 就可以正常启动吗? 如果是type 自定义的类型 T 就需要制定一个int 或者 string吗?

    作者回复: 问题没太看懂。文中例子switch x.(type) 中的x是一个interface{}类型接口,Go所有类型都实现了该接口,包括自定义类型T。

    
    
  • 文经
    2021-12-24
    白老师,switch v := x.(type),有点不太好理解。 这个语句编译器是不是转化为类型这样的代码: v := x.(type) switch x.(type) 我直观上会理解成: v := x.(type) switch v 这算不算编译器提供的一种语法糖?

    作者回复: switch的不是v。

    
    