golang 动态 实例化 结构体
真理http://stackoverflow.com/questions/10210188/instance-new-type-golang
So,if I understand your question correctly,you are asking about how you can create an object when you just have the name of the type as string. So,for example,you might have a string "MyStruct" and you want to create an object of this type. Unfortunately,that's not easily possible because Go is a statically typed language and the linker will eliminate dead code (or inline parts of it). So,there is no guarantee,that your final executable will even contain the code of "MyStruct". You can however,maintain a global reflect.New(yourtype).Elem().Interface() Elem()will de-reference the pointer andInterface()will return the reflected value as an PS: There might be a better way to structure your program which doesn't even require reflection and which let the compiler catch more errors. Have you considered using afactory methodfor example? An other easy solution might be to maintain a
http://mikespook.com/2012/07/%E5%9C%A8-golang-%E4%B8%AD%E7%94%A8%E5%90%8D%E5%AD%97%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0/ 但这里有一个限制:这个 map 仅仅可以用原型是“func()”的没有输入参数或返回值的函数。
***********参考*****************
1. https://www.socketloop.com/tutorials/golang-fix-type-interface-has-no-field-or-no-methods-and-type-assertions-example Golang : Fix type interface{} has no field or no methods and type assertions example
2.golang用字符串反射实例化结构体 package main import ( "fmt" "reflect" ) type Foo struct { } type Bar struct { } //用于保存实例化的结构体对象 var regStruct map[string]interface{} func main() { str := "Bar" if regStruct[str] != nil { t := reflect.ValueOf(regStruct[str]).Type() v := reflect.New(t).Elem() fmt.Println(v) } } func init() { regStruct = make(map[string]interface{}) regStruct["Foo"] = Foo{} regStruct["Bar"] = Bar{} }
3.http://stackoverflow.com/questions/17507697/dry-out-my-go-function-with-interfaces
kinds := map[string]func() Entity { "user": func return&User{}},"space"Space"room"Room} func Createkind ) instance kinds[kind]() decoderDecodeinstance saveEntity} 4. 新手求解 golang 动态new struct http://www.oschina.net/question/1388294_141504?sort=default&p=2#answers
<span style="font-size:14px;">我现在是这样做的 var ModelObj map[string]interface{} = map[string]interface{}{ "Member": new(Member),} func GetModObj(mod string) interface{} { if ModelObj[mod] != nil { return ModelObj[mod] } else { return nil } } </span> 5.http://stackoverflow.com/questions/13856539/how-do-you-get-struct-value-on-unknown-interface (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |