面试题答案
一键面试- 可能遇到的错误情况
- 类型断言失败:当空接口实际存储的类型与断言的类型不匹配时,会导致类型断言失败。例如,一个空接口存储了
int
类型,却试图断言为string
类型。
- 类型断言失败:当空接口实际存储的类型与断言的类型不匹配时,会导致类型断言失败。例如,一个空接口存储了
- 处理方式及代码示例
- 使用comma - ok 形式:这是一种安全的类型断言方式,即使断言失败也不会导致程序崩溃。
package main
import (
"fmt"
)
func main() {
var i interface{} = 10
s, ok := i.(string)
if!ok {
fmt.Println("类型断言失败,i 不是 string 类型")
} else {
fmt.Println("断言成功,s =", s)
}
}
- 使用类型开关(type switch):当需要根据空接口存储的不同类型进行不同处理时,类型开关非常有用。
package main
import (
"fmt"
)
func main() {
var i interface{} = "hello"
switch v := i.(type) {
case int:
fmt.Printf("i 是 int 类型,值为 %d\n", v)
case string:
fmt.Printf("i 是 string 类型,值为 %s\n", v)
default:
fmt.Println("i 是其他类型")
}
}
通过这两种方式,可以有效地处理在Go语言中从空接口提取具体类型值时可能出现的错误情况。