面试题答案
一键面试- 在Go中利用空接口存储不同类型数据的原理:
- 空接口
interface{}
可以存储任何类型的数据,因为Go语言的接口是隐式实现的,任何类型都隐式实现了空接口。
- 空接口
- 代码示例:
package main
import (
"fmt"
)
// 定义一个自定义结构体
type Person struct {
Name string
Age int
}
func main() {
var data interface{}
// 存储整数
data = 10
if num, ok := data.(int); ok {
fmt.Printf("取出的整数: %d\n", num)
}
// 存储字符串
data = "hello"
if str, ok := data.(string); ok {
fmt.Printf("取出的字符串: %s\n", str)
}
// 存储自定义结构体
p := Person{Name: "John", Age: 30}
data = p
if person, ok := data.(Person); ok {
fmt.Printf("取出的自定义结构体: Name: %s, Age: %d\n", person.Name, person.Age)
}
}
上述代码中:
- 首先定义了一个
interface{}
类型的变量data
。 - 然后依次将整数、字符串和自定义结构体
Person
存储到data
中。 - 每次存储后,通过类型断言(
value, ok := data.(type)
)的方式尝试从data
中取出对应类型的数据,并在取出成功时进行打印。如果类型断言失败,ok
为false
,不会执行打印操作。