我无法理解为什么类型开关是用 switch 语句中定义的附加变量编写的。下面的代码似乎是被认可的做事方式:
func test_func(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("%T\n", v)
case float64:
fmt.Printf("%T\n", v)
case int:
fmt.Printf("I don't know about type %T!\n", v)
}
}
func main() {
test_func(float64(34))
test_func(int(34))
test_func("hello world")
}
正如预期的那样,这将返回:
float64
int
I don't know about type string!
但是,我可以test_func稍微改变一下,这样v就不会在语句中定义switch,而是i在我们的 case 语句中使用:
func test_func(i interface{}) {
switch i.(type) {
case int:
fmt.Printf("%T\n", i)
case float64:
fmt.Printf("%T\n", i)
case int:
fmt.Printf("I don't know about type %T!\n", i)
}
}
func main() {
test_func(float64(34))
test_func(int(34))
test_func("hello world")
}
并且输出没有改变。这两种形式似乎可以互换。为什么我要麻烦地定义v什么时候可以使用i?后一种情况更简单,因为需要跟踪的变量更少;也许它的性能更高。
慕妹3146593
相关分类