2 回答
TA贡献1853条经验 获得超6个赞
是的,您可以使用反射在运行时检查它。这是一个非常简单的示例,用于打印嵌入结构reflect.TypeOf的每个字段的类型,并打印字段是否为匿名() - 这是您要求的一个很好的指标:BarFooreflect.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))
}
}
这是操场上的代码:https: //play.golang.org/p/zNWxZUzq_RS
你不会问你到底想用这些信息做什么,所以将你指向reflect文档以进行更高级的使用。
TA贡献1789条经验 获得超8个赞
检查 的Anonymous字段reflect.StructField。
func embedsBaseModel(v interface{}) bool {
rt := reflect.TypeOf(v)
if rt.Kind() != reflect.Struct {
return false
}
base := reflect.TypeOf(BaseModel{})
for i := 0; i < rt.NumField(); i++ {
if sf := rt.Field(i); sf.Type == base && sf.Anonymous {
return true
}
}
return false
}
https://play.golang.com/p/-6flZcdSYwj
- 2 回答
- 0 关注
- 120 浏览
添加回答
举报