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

时间:2018-12-23 12:49:41

标签: go struct

我具有接受接口的功能{}

func MyFunk(itf interface{}) {
}

我想知道是否通过的itf是一个结构,这可能吗?我尝试了反射的几种组合,得出的结局是ptr(指针)。

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:4)

使用reflect包,您可以检查结构类型和结构指针:

sectionCounter = Math.max(1, sectionCounter - 1);

答案 2 :(得分:1)

可能Type assertions可以为您

func MyFunk(itf interface{}) {
    s, ok := itf.(MyStruct)
    fmt.Println(s, ok)
}