Go 中是否有与 Java 等语言提供的动态类实例化功能等效的东西(注意:为简洁起见,此处省略了必要的异常处理逻辑):
Class cls = Class.forName("org.company.domain.User");
Constructor<User> userConstructor = cls.getConstructor();
User user1 = userConstructor.newInstance();
上面的简短 Java 片段本质上是通过提供的完全限定的类路径字符串来获取对 Class 的引用,然后使用类引用来获取对零参数构造函数的引用(其中存在一个),最后构造函数用于获取对类的实例。
我还没有在 Go 中找到一个类似机制的例子,它可以实现类似的结果。更具体地说,似乎 go 中的reflect包要求调用者已经引用了他们希望实例化的结构类型。这方面的标准成语似乎如下:
reflect.New(reflect.TypeOf(domain.User))
注意:提供给 reflect.TypeOf 函数的参数必须是Type 而不是 string。可以通过反射包在 Go 中实例化一个结构,只使用它的完全限定名吗?