该程序的输出是 map [] ,但我想要 map [Id:true name:true]
我试图弄干我的一些SQL CRUD代码,并认为嵌入处理读和写数据库的持久性结构会很好。在下面的示例中,持久性结构将为Inner,而我的模型将为Outer。谢谢!
http://play.golang.org/p/fsPqJ-6aLI package main import ( "fmt" "reflect" ) type Inner struct { } type Outer struct { Inner Id int name string } func (i *Inner) Fields() map[string]bool { typ := reflect.TypeOf(*i) attrs := make(map[string]bool) if typ.Kind() != reflect.Struct { fmt.Printf("%v type can't have attributes inspected\n", typ.Kind()) return attrs } // loop through the struct's fields and set the map for i := 0; i < typ.NumField(); i++ { p := typ.Field(i) if !p.Anonymous { v := reflect.ValueOf(p.Type) v = v.Elem() attrs[p.Name] = v.CanSet() } } return attrs } func main() { val := Outer{} fmt.Println(val.Fields()) // prints map[], but I want map[Id:true name:true] }
你不能 您专门在上调用了一个方法Inner,该方法不知道其嵌入位置。嵌入不是继承,它是简单的自动委派。
Inner
您可能希望将它们包装在一个通用的持久性接口中,或者甚至是一个可以处理数据类型持久性的通用函数。
现在,如果您 真的 想尝试此操作,则可以通过指针地址访问外部结构,但是您将需要知道要访问的外部类型,这意味着您无法通过反射来获取它。
outer := (*Outer)(unsafe.Pointer(i)) typ := reflect.TypeOf(*outer)