MST

星途 面试题库

面试题:Go语言中类型断言在接口类型上的使用原理

请阐述在Go语言中,当对一个接口类型变量进行类型断言时,其背后的工作原理是什么?并且给出一个简单的示例代码,展示如何对一个空接口类型变量进行类型断言,判断其是否为`int`类型,并获取其值。
19.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 工作原理
    • 在Go语言中,接口类型变量内部包含一个runtime.iface(非空接口)或runtime.eface(空接口)结构体。runtime.iface结构体包含两个字段:一个指向具体类型信息的指针tab,另一个是指向实际数据的指针dataruntime.eface结构体只有一个指向实际数据的指针data和数据的类型信息_type
    • 当进行类型断言时,Go语言运行时会检查接口变量内部存储的实际类型是否与断言的类型相匹配。如果匹配,就可以安全地获取到实际类型的值;如果不匹配,在非comma - ok形式下会触发运行时恐慌(panic),在comma - ok形式下第二个返回值会为false
  2. 示例代码
package main

import (
    "fmt"
)

func main() {
    var i interface{}
    i = 10

    value, ok := i.(int)
    if ok {
        fmt.Printf("The value is of type int and its value is: %d\n", value)
    } else {
        fmt.Println("The value is not of type int")
    }
}