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

标签 go struct reflection types

例如,给出了x interface{}。如果它是复合类型(结构或指向结构的指针)或“简单”类型,如 stringint,如何确定(可能使用反射) float 等?

最佳答案

您可以使用包 reflect , 获取其类型,并查看其 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

关于go - 如何确定对象是否为复合(类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611708/

相关文章:

c++ - 性能 : better to inizialize variable or just fill it?

objective-c - 可以在 c 结构中使用 CATextLayer 吗?

java - 在java中使用反射时如何检查方法参数的类型

c# - 表示 C# 中某些类型的对象

haskell - GHC 7.8 中“不能”输入哪些内容?

angularjs - 如何使用 Go 从一个 HTTP 请求中解析文件和 JSON 数据?

sockets - 同步读取和写入到 TCP 套接字

C 程序接收信号 SIGTRAP,每 3 次尝试运行良好

go - 将自定义类型断言为基本类型

Go:我是否创造了太多的值(value)?