如何知道具有类型接口的参数是否实际上是一个结构?

1 struct go

我有这个函数接受一个接口{}

func MyFunk(itf interface{}) {
}
Run Code Online (Sandbox Code Playgroud)

我想知道itf传递的结构是否可能?我已经尝试了几种反射组合,我可以获得的关闭是ptr(指针).

Cer*_*món 5

使用以下命令检测参数是否为结构:

func MyFunk(itf interface{}) {
    v := reflect.ValueOf(itf)
    if v.Kind() == reflect.Struct {
        // it's a struct
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您还想检查结构的指针,请使用以下代码:

func MyFunk(itf interface{}) {
    v := reflect.Indirect(reflect.ValueOf(itf))
    if v.Kind() == reflect.Struct {
        // it's a struct
    }
}
Run Code Online (Sandbox Code Playgroud)