真理 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".
map[string]reflect.Typeinit()
reflect.New(yourtype).Elem().Interface()
interface{}
map[string]func() interface{}
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()”的没有输入参数或返回值的函数。
如果想要用这个方法实现调用不同函数原型的函数,需要用到 interface{}。
***********参考*****************
1. https://www.socketloop.com/tutorials/golang-fix-type-interface-has-no-field-or-no-methods-and-type-assertions-example
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() Entity { return &User{} },
"space": func() Entity { return &Space{} },
"room": func() Entity { return &Room{} },
}
func Create(kind string) {
instance := kinds[kind]()
decoder.Decode(instance)
saveEntity(instance)
}
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