我如何可以通过包名称列表中的所有结构和方法,或结构的名称来创建一个结构实例,如
```go
package test
type User struct {
Name string
}
func getStructNameByPackageName(packageName string) []string{
...
}
func createStructInstance(structName string) interface{}{
...
}
```
调用函数getstructnamebypackagename(“test”)我们将得到结果:['User']
调用函数createstructinstance(“test.User”)我们将得到结果:一个用户实例
我在网上浏览了很多网页,但是大多数人说不能这么做。如果可以的话,请告诉我,非常感谢。
你这个功能我说了啊,是工厂模式的需求啊,和反射没关系啊……
http://www.runoob.com/design-pattern/factory-pattern.html
以sql库为例
https://golang.org/pkg/database/sql/
有个全局的Drivers存放所有的driver信息
https://golang.org/src/database/sql/sql.go?s=1514:1537#L53
然后有一个Register方法,供子包把初始化函数以字符串的方式注册进模块
https://golang.org/src/database/sql/sql.go?s=1028:1076#L33
以mysql库为例
https://github.com/go-sql-driver/mysql/blob/master/driver.go
最后会在init方法里调用 sql.Register
写代码的时候,需要
import "database/sql"
import _ "github.com/go-sql-driver/mysql"
db, err := sql.Open("mysql", "user:password@/dbname")
这样来使用
参考 https://github.com/go-sql-driver/mysql
这应该就是你需要的东西了吧?
#9
更多评论