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-09-15 14:20:26 +08:00
没办法, go 语言本身没有统计代码里所有的类型和名称
要不就用 go generate ,编译时自动产生“预定义”的代码 |
2
johnsneakers OP @zhujinliang 也只能这样,正在看 go generate 。
|
3
kzzhr 2015-09-15 14:56:06 +08:00
直接 new 一个结构体不就好了么。怎么还用到反射?是我没看懂问题?
|
4
ljbha007 2015-09-15 15:05:54 +08:00
|
5
njutree 2015-09-16 10:11:17 +08:00
Go 语言本来就是静态编译型语言,你这么做肯定 DT ,就和你要求 PHP 在运行前类型检查一样 DT
|
6
456vv 2016-03-17 15:04:41 +08:00
没有很好的方法,可使用 map 来代替 struct
|