V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
johnsneakers
V2EX  ›  Go 编程语言

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

  •  
  •   johnsneakers · 2015-09-15 13:54:36 +08:00 · 1178 次点击
    这是一个创建于 3148 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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")
    }

    6 条回复    2016-03-17 15:04:41 +08:00
    zhujinliang
        1
    zhujinliang  
       2015-09-15 14:20:26 +08:00
    没办法, go 语言本身没有统计代码里所有的类型和名称
    要不就用 go generate ,编译时自动产生“预定义”的代码
    johnsneakers
        2
    johnsneakers  
    OP
       2015-09-15 14:31:31 +08:00
    @zhujinliang 也只能这样,正在看 go generate 。
    kzzhr
        3
    kzzhr  
       2015-09-15 14:56:06 +08:00
    直接 new 一个结构体不就好了么。怎么还用到反射?是我没看懂问题?
    njutree
        5
    njutree  
       2015-09-16 10:11:17 +08:00
    Go 语言本来就是静态编译型语言,你这么做肯定 DT ,就和你要求 PHP 在运行前类型检查一样 DT
    456vv
        6
    456vv  
       2016-03-17 15:04:41 +08:00
    没有很好的方法,可使用 map 来代替 struct
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5359 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 09:23 · PVG 17:23 · LAX 02:23 · JFK 05:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.