为了账号安全,请及时绑定邮箱和手机立即绑定

如何确定对象是否为复合(类型)

如何确定对象是否为复合(类型)

Go
智慧大石 2023-05-15 14:32:43
例如, x interface{}给出。string如果它是复合类型(结构或指向结构的指针)或“简单”类型(如, int,float等),如何确定(可能使用反射) ?
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以使用 package reflect,获取其 type 并检查其kind。如果是指针类型,则“导航”到指向的类型:


func isStruct(i interface{}) bool {

    t := reflect.TypeOf(i)

    if t.Kind() == reflect.Ptr {

        t = t.Elem()

    }

    return t.Kind() == reflect.Struct

}

测试它:


fmt.Println(isStruct("text"))

fmt.Println(isStruct(1))

fmt.Println(isStruct(image.Point{}))

fmt.Println(isStruct(&image.Point{}))

输出(在Go Playground上尝试):


false

false

true

true


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信