MST

星途 面试题库

面试题:Go中利用空接口构建动态类型系统的基础实现

请描述如何在Go中利用空接口来存储不同类型的数据,并编写一段简单代码示例,展示将整数、字符串和自定义结构体存储到空接口变量中,然后再通过类型断言将它们取出。
49.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 在Go中利用空接口存储不同类型数据的原理
    • 空接口 interface{} 可以存储任何类型的数据,因为Go语言的接口是隐式实现的,任何类型都隐式实现了空接口。
  2. 代码示例
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 中取出对应类型的数据,并在取出成功时进行打印。如果类型断言失败,okfalse,不会执行打印操作。