```go
package golang
import (
"fmt"
"testing"
)
func valType(v interface{}) {
switch v := v.(type) {
case *int:
fmt.Println("*int", v == nil)
case int:
fmt.Println("int", v)
}
}
func valType2(v interface{}) {
switch v := v.(type) {
case *int, *string:
fmt.Println("*int or *string", v == nil) // 为什么不为nil
case int:
fmt.Println("int", v)
}
}
func TestValType(t *testing.T) {
var v *int
valType(v)
valType2(v)
var s *string
valType2(s)
}
```
如果你使用goland,把鼠标放到switch内的变量上,会提示 valType内的 v是 *int ,valType2内的 v是interface{}。
方法传入的参数是有类型的。valType2内的变量 v 是带类型的interface{}。所以是false。
#12
更多评论
#### 输出结果
```shell
*int true
*int or *string false
*int or *string false
```
#1
case 后面跟多个类型时,只要其中一个类型匹配, 会直接将v赋值给k,类似执行k:=v
```go
switch k := v.(type) {
case *int, *string:
fmt.Println("*int or *string", k == nil)
case int:
fmt.Println("int", k)
}
```
#2