MST

星途 面试题库

面试题:Go空接口与nil值在类型断言中的复杂情况

假设我们有如下Go代码: ```go package main import "fmt" func main() { var data interface{} var num int num = 10 data = num var result interface{} if value, ok := data.(int); ok { result = value } if result == nil { fmt.Println("result为nil") } else { fmt.Println("result不为nil") } } ``` 请分析上述代码执行逻辑及输出结果,并解释原因。如果想要通过类型断言判断空接口是否为nil且包含预期类型值,应如何处理?
30.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 代码执行逻辑及输出结果

    • 首先声明了一个空接口 data 和一个 int 类型变量 num,并给 num 赋值为 10,然后将 num 赋值给 data
    • 接着声明了另一个空接口 result,通过类型断言 data.(int) 判断 data 是否为 int 类型,如果是,则将断言得到的值赋给 result
    • 最后判断 result 是否为 nil,因为 data 确实是 int 类型,所以 result 不为 nil,输出结果为:result不为nil
  2. 判断空接口是否为nil且包含预期类型值的处理方式: 在Go语言中,空接口本身和其包含的值是两个不同的概念。要判断空接口是否为 nil 且包含预期类型值,可以先判断空接口是否为 nil,再进行类型断言。例如:

package main

import "fmt"

func main() {
    var data interface{}
    // 这里data为nil,未赋值
    if data == nil {
        fmt.Println("data为nil")
    } else if value, ok := data.(int); ok {
        fmt.Printf("data为int类型,值为: %d\n", value)
    } else {
        fmt.Println("data不是int类型")
    }
}

在这个示例中,先判断 data 是否为 nil,如果不为 nil 再进行类型断言,这样就可以同时判断空接口是否为 nil 且包含预期类型值。