PHP 版本这样:
public function factory ($string ) {
reutnr new $string
}
而 GO 版本还得预定义,我是这样
func GetInstance (str string ) reflect.Value {
var typeRegistry = make (map[string]reflect.Value )
typeRegistry["xxx"] = reflect.ValueOf (&XXX{})
// ... 有多少这样就有预定义多少
return typeRegistry[str].MethodByName ("GetData")
}
1
zhujinliang 2015 年 9 月 15 日
没办法, go 语言本身没有统计代码里所有的类型和名称
要不就用 go generate ,编译时自动产生“预定义”的代码 |
2
johnsneakers OP @zhujinliang 也只能这样,正在看 go generate 。
|
3
kzzhr 2015 年 9 月 15 日
直接 new 一个结构体不就好了么。怎么还用到反射?是我没看懂问题?
|
4
ljbha007 2015 年 9 月 15 日
|
5
njutree 2015 年 9 月 16 日
Go 语言本来就是静态编译型语言,你这么做肯定 DT ,就和你要求 PHP 在运行前类型检查一样 DT
|
6
456vv 2016 年 3 月 17 日
没有很好的方法,可使用 map 来代替 struct
|