我如何可以通过包名称列表中的所有结构和方法,或结构的名称来创建一个结构实例,如
```go
package test
type User struct {
Name string
}
func getStructNameByPackageName(packageName string) []string{
...
}
func createStructInstance(structName string) interface{}{
...
}
```
调用函数getstructnamebypackagename(“test”)我们将得到结果:['User']
调用函数createstructinstance(“test.User”)我们将得到结果:一个用户实例
我在网上浏览了很多网页,但是大多数人说不能这么做。如果可以的话,请告诉我,非常感谢。
这个不是对象池,这个是工厂的池,创建器的池……
比如我前面缓存的代码里,实现其实是靠下面这几块的。
factories = make(map[string]Factory)
type DriverConfig interface { Create() (Driver, error) }
type Factory func() DriverConfig
func Register(name string, f Factory) {
}
如果实在要用 reflect.New(Type),你直接把map里值设为 reflect.Type就行了。
但你如果用过golang反射包的话,golang是没有构建函数的,你 reflect.New(Type)是没用的,取到的是一个指向空的指针。还是需要自己的构建函数去构建的。
#11
更多评论