MST
星途 面试题库

面试题:Go中基于空接口反射获取结构体字段类型

在Go语言中,给定一个包含空接口的函数,该空接口实际指向一个结构体实例,如何通过反射获取这个结构体中每个字段的类型?请给出代码示例。
32.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "reflect"
)

type TestStruct struct {
    Field1 string
    Field2 int
}

func inspect(i interface{}) {
    value := reflect.ValueOf(i)
    if value.Kind() != reflect.Struct {
        fmt.Println("Input is not a struct")
        return
    }

    typeOf := value.Type()
    for i := 0; i < value.NumField(); i++ {
        fieldType := typeOf.Field(i).Type
        fmt.Printf("Field %d: Type = %v\n", i+1, fieldType)
    }
}

func main() {
    s := TestStruct{
        Field1: "Hello",
        Field2: 42,
    }
    inspect(s)
}

上述代码中:

  1. 定义了一个TestStruct结构体,包含两个字段Field1Field2
  2. inspect函数接收一个空接口类型的参数,通过reflect.ValueOf获取值,检查其是否为结构体类型。
  3. 如果是结构体类型,通过typeOf.Field(i).Type获取每个字段的类型并打印。
  4. main函数中,创建TestStruct实例并调用inspect函数。