蛋疼啊,我想动态 new 一个结构体。貌似 GO 不支持

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX