假设我有以下结构:
type Room struct {
BaseModel
}
func main() {
r := Room{}
}
在代码的其他地方说我获得了一个对象 r。它可以是 Room
或其他东西。我想在运行时检查 r 的类(在本例中为 Room
)是否具有 BaseModel 的结构嵌入。这可能吗?
最佳答案
是的,您可以使用反射在运行时进行检查。这是一个非常简单的示例,它使用 reflect.TypeOf
来打印嵌入结构 Foo
和 reflect 的结构
用于打印字段是否为匿名 (Bar
的每个字段的类型。 ValueOftrue
) - 这是您要求的一个很好的指标:
package main
import (
"fmt"
"reflect"
)
type Foo struct {
foo string
}
type Bar struct {
Foo
bar string
}
func main() {
test := Bar{}
t := reflect.TypeOf(test)
for i := 0; i < t.NumField(); i++ {
fmt.Print(t.Field(i).Type, " ")
fmt.Println(reflect.ValueOf(t.Field(i).Anonymous))
}
}
这是 Playground 上的代码:https://play.golang.org/p/zNWxZUzq_RS
你不会问你到底想用这些信息做什么,所以你会指向 reflect
documentation用于更高级的用途。
关于go - 在运行时检查结构是否具有结构嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585699/