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