面试题答案
一键面试类型断言
类型断言用于从空接口中提取具体类型的值。语法为x.(T)
,其中x
是一个空接口类型的表达式,T
是断言的类型。如果断言失败,会触发运行时恐慌。
示例代码:
package main
import (
"fmt"
)
func main() {
var data interface{} = 10
num, ok := data.(int)
if ok {
fmt.Printf("类型断言成功,值为: %d\n", num)
} else {
fmt.Println("类型断言失败")
}
}
类型选择
类型选择用于在运行时根据接口值的动态类型执行不同的代码块。语法类似switch
语句。
示例代码:
package main
import (
"fmt"
)
func main() {
var values []interface{}
values = append(values, 10, "hello", 3.14)
for _, value := range values {
switch v := value.(type) {
case int:
fmt.Printf("整型值: %d\n", v)
case string:
fmt.Printf("字符串值: %s\n", v)
case float64:
fmt.Printf("浮点型值: %f\n", v)
default:
fmt.Println("未知类型")
}
}
}
两者区别
- 语法结构:类型断言使用
x.(T)
的形式,而类型选择使用switch
语句的形式。 - 用途:类型断言用于明确知道接口值的类型,只想提取特定类型的值;类型选择用于在运行时根据接口值的动态类型执行不同逻辑。
- 错误处理:类型断言如果失败会触发运行时恐慌(可以通过逗号ok形式避免),而类型选择通过
default
分支处理不匹配的类型,不会触发恐慌。