实例新类型(Golang)

2024-01-01

谁能告诉我如何从字符串创建 Type 的新实例?反映?

有一些示例,但它们适用于较旧的(Go 1 之前的版本)语言 [:(]


所以,如果我正确理解你的问题,你是在问当你只有类型名称作为字符串时如何创建一个对象。例如,您可能有一个字符串“MyStruct”,并且您想要创建此类型的对象。

不幸的是,这并不容易实现,因为 Go 是一种静态类型语言,链接器将消除死代码(或其内联部分)。因此,不能保证您的最终可执行文件甚至会包含“MyStruct”的代码。

但是,您可以维护全局map[string]reflect.Type手动。例如,通过在init()定义此类可发现类型的包的函数。这也将告诉编译器您正在使用这些类型。之后,您可以使用此地图来查找反射类型 http://golang.org/pkg/reflect/#Type您要创建和使用的类型反映.新 http://golang.org/pkg/reflect/#New获取指向该类型的新对象的指针(存储为reflect.Value)。您可以将对象提取到接口中,如下所示:

reflect.New(yourtype).Elem().Interface()

Elem() http://golang.org/pkg/reflect/#Value.Elem将取消引用指针并界面() http://golang.org/pkg/reflect/#Value.Interface将返回反射值作为interface{}. See 反思法则 http://blog.golang.org/2011/09/laws-of-reflection.html了解更多详情。

PS:可能有一种更好的方法来构造你的程序,它甚至不需要反射,并且可以让编译器捕获更多错误。您是否考虑过使用工厂方法 http://en.wikipedia.org/wiki/Factory_method_pattern例如?另一个简单的解决方案可能是维护map[string]func() interface{}可以调用这些函数来创建具有该名称的新对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实例新类型(Golang) 的相关文章

  • 如何用 Go 将多个字符串解析为模板?

    有没有像这样的简单方法template ParseFiles base html home html 但是对于字符串来说 如何从一组字符串构建模板 我有一个基本模板和一个页面模板列表 全部为字符串 我想在基本模板之上构建它们 我想出了如何合
  • mypy 如何忽略源文件中的一行?

    我在用着mypy http mypy lang org 在我的 python 项目中进行类型检查 我还使用 PyYAML 来读取和写入项目配置文件 不幸的是 当使用PyYAML 文档中推荐的导入机制 http pyyaml org wiki
  • 为什么空切片有 24 个字节?

    我想了解创建空切片时会发生什么make int 0 我执行此代码进行测试 emptySlice make int 0 fmt Println len emptySlice fmt Println cap emptySlice fmt Pri
  • 在 C# 中将字符串转换为类型[重复]

    这个问题在这里已经有答案了 如果我收到一个包含类名称的字符串 并且我想将该字符串转换为真实类型 字符串中的类型 我该怎么做 I tried Type GetType System Int32 例如 它似乎有效 但是当我尝试使用自己的对象时
  • Go1编译器如何工作?

    我在一个学校项目中接触 Go 大约一个月了 我注意到 src pkg go 文件夹中的 go ast go token go parser 等包 但是 gc 编译器基于位于 src cmd gc 中的 C 文件 我的问题是关于 Go1 中用
  • 如何获取字段类型的零值

    我有一个包含许多字段的结构 我已经弄清楚如何使用反射提取字段名称 值和标签信息 我还想做的是确定字段的值是否与字段的默认值不同 目前 我有这个 有效 但有点臭 qsMap make map string interface var defa
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • 要统一的类型变量出现在类型中

    我有一个函数可以从两个列表重建一棵树 我返回所有分支的列表 但收到一个我不明白的错误 但我认为这与返回类型有关 错误是这样的 Can t unify a with a list Type variable to be unified occ
  • Assembly.GetTypes() 返回类型的顺序是什么?

    如果我获得 AppDomain 中的类型列表 这些类型是否有固有的顺序 List
  • 在 Go 中将 float 转换为 int 时如何舍入到最近的 int

    将 float 转换为 int 时 小数点将被丢弃 有什么干净的方法可以将其四舍五入到最接近的整数 x int 3 6 应等于 4 而不是 3 int f 0 5 如果 gt 5 将导致向上舍入
  • Haskell 中的异构多态性(正确方法)

    让一个模块来抽象Area操作 错误的定义 class Area someShapeType where area someShapeType gt Float module utilities sumAreas Area someShape
  • Golang delve,如何启动调试器并启动正在调试的应用程序?

    我正在尝试设置一个可以远程连接的无头深度调试器 我无法找到一种方法来启动调试服务器 而该服务器不会暂停我正在调试的应用程序 我一直在使用dlv attach headless true listen 2345 attach 32但这会暂停该
  • 为什么结构体不能转换为嵌入类型

    package main type Inner struct x int type Outer struct Inner func main x Inner 1 y Outer x cannot convert x type Inner t
  • 防止被 0 除的 Typescript 类型

    我正在使用打字稿创建一个用于培训目的的计算系统 但在除法过程中出现打字错误 您知道如何解决吗 type Variable value number resolve gt number type NoZeroVariable value Om
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • Go 中的切片分块

    我有一个切片 其中包含约 210 万条日志字符串 我想创建一个切片切片 其中字符串尽可能均匀分布 这是我到目前为止所拥有的 logs is a slice with 2 1 million strings in it var divided
  • 如何使用 mongo-go-driver 有效地将 bson 转换为 json?

    我想将 bson 转换为mongo go 驱动程序 https github com mongodb mongo go driver有效地转换为 json 我应该小心处理NaN 因为json Marshal失败如果NaN存在于数据中 例如
  • 在 Go 中执行字节数组

    我正在尝试在 Go 程序中执行 shellcode 类似于使用其他语言执行此操作的方式 示例 1 C 程序中的 Shellcode https stackoverflow com questions 16626857 shellcode i
  • 如何顺序运行 golang 测试?

    当我跑步时go test 我的输出 FAIL TestGETSearchSuccess 0 00s Location drivers api test go 283 Error Not equal 200 expected 204 actu
  • Google Cloud Kubernetes 上任务队列的替代方案

    我发现任务队列主要用于App Engine标准环境 我正在将现有服务从 App Engine 迁移到 Kubernetes 任务队列的一个好的替代方案是什么 推送队列是当前正在使用的队列 我在线阅读文档并浏览了此链接 何时使用 PubSub

随机推荐

  • 为什么“mvn编译”需要“test-jar”依赖项

    我使用时遇到问题test jar多模块项目中的依赖关系 例如 当我声明cleartk syntax模块取决于cleartk token模块的test jar像这样 完整的代码是here https cleartk googlecode co
  • 使用 geb 和 spock 时在页面之间传递状态

    在下面的示例中 取自盖布之书 http geb codehaus org manual latest index html 我们点击一 个按钮 将我们带到另一个页面 class GoogleHomePage extends Page sta
  • laravel 队列守护程序邮件因 SSL 错误而停止运行

    我正在运行一个 laravel 队列守护进程 它根据所采取的操作发送邮件 这是通过主管运行以确保它始终运行 一开始工作正常 但一段时间后邮件停止发送 错误没有报告到链上 但日志显示 2014 07 30 20 00 21 productio
  • 通过 gem install tiny_tds 在 OSX 10.6 上安装 TinyTDS 时出错

    我一直在尝试在 OSX 10 6 的 Macbook 上安装 TinyTDS gem 我成功安装了免费 TDS 通过以下方式确认它可以正常工作 tsql H SERVER p 1433 U username 我得到的错误宝石安装tiny t
  • 我编写了一个脚本将文件复制到备份文件夹,但独立的 webapp 文件被复制到根目录

    有谁知道为什么会发生这种情况 将所有文件复制到目的地会方便得多 我有一个文件名和文件 ID 列表 其中 3 个是电子表格 一个是我部署为 Web 应用程序的独立脚本 这三个电子表格转到正确的位置 独立的 Web 应用程序会转到根目录 我不认
  • 对 GLSL 着色器进行基准测试以比较替代实现的速度

    我想绘制二维函数z f x y 使用 OpenGL 和 GLSL 着色器 我想使用颜色图将函数的值映射到颜色 但某些颜色图是使用 HSL 或 HSV 颜色空间表示的 例如色调图 您可以 在这里和其他地方 找到不同的替代实现hsv2rgb 在
  • 无法在 Vagrant 上安装 Kubernetes

    使用本指南在 Vagrant 集群上安装 Kubernetes https kubernetes io docs getting started guides kubeadm https kubernetes io docs getting
  • 它真的是一个activex控件吗?

    我有一个相当简单的代码块 Sub Run Name on error resume next Set objShell CreateObject WScript Shell if Err Number 429 then alert Inva
  • 使用 Gradle 进行 git 描述的 Android 构建的自动版本控制

    我进行了广泛的搜索 但可能是由于 Android Studio 和 Gradle 的新颖性 我还没有找到任何关于如何执行此操作的描述 我想做基本上完全按照中描述的这个帖子 https stackoverflow com questions
  • 如何更改非英语单词的字体大小?

    In a Word 2007 https en wikipedia org wiki History of Microsoft Word Word 2007 document I manually select a sentence con
  • Git:如何从索引中删除文件而不从任何存储库中删除文件

    当你使用 git rm cached myfile 它不会从本地文件系统中删除 这是目标 但是 如果您已经对文件进行版本控制并提交 将其推送到中央存储库 并在使用该命令之前将其拉入另一个存储库 则它将从该系统中删除该文件 有没有办法只从版本
  • 字符串格式日期 - C# 或 VB.NET

    来自数据库的日期 需要格式为 mm dd yy For Each dr as DataRow in ds Tables 0 Rows Response Write dr CreateDate Next string Format 0 MM
  • 从 .h 文件 Visual Studio 创建 .cpp 文件

    我正在使用 Visual Studio 2008 我想知道是否可以根据给定的头文件创建 cpp 文件 因此 如果我有一个包含类和函数的 h 文件 它可以创建包含空白正文中输入的所有函数的代码文件 捷径 alt shift f10 VS201
  • 哪个版本的 gcc 支持 -Ofast 优化级别?

    我在 gcc 的文档中找到了 Ofast level opthttp gcc gnu org onlinedocs gcc Optimize Options html Optimize Options http gcc gnu org on
  • 重置/删除 Swing 中的边框

    这是一个非常具体的编码问题 最近 我被要求在工作中维护一些旧的 Java Swing GUI 代码 并遇到了这个问题 我已将我自己的名为 MyFilenameVerifier 的 InputVerifier 子类附加到 JTextField
  • Flutter - MultiProvider 如何与相同类型的提供者一起工作?

    例如 我试图同时获取多个流发出的数据 但其中 2 个或更多流发出相同类型的数据 比如说字符串 我的问题是 是否可以使用MultiProvider并使用多个StreamProvider 或任何提供者 但我对这种情况感兴趣 相同类型 同时仍然能
  • 流、视图、迭代器

    scala 中的流 视图 SeqView 和迭代器之间有什么区别 这是我的理解 它们都是惰性列表 流缓存值 迭代器只能使用一次 就不能回到起点重新评估价值吗 View 的值不会被缓存 但你可以一次又一次地评估它们 因此 如果我想节省堆空间
  • 如何更改asp.net core中的程序集信息?

    我想对我的 ASP NET Core 应用程序进行版本控制 我点击了这个链接 http www matthiaseinig de 2013 05 20 auto generate fileversion for all projects i
  • 计算每个场点位于轮廓内的频率

    我正在处理二维地理数据 我有一长串轮廓路径 现在我想确定域中的每个点有多少个轮廓 即我想计算轮廓表示的特征的空间频率分布 为了说明我想要做什么 这是第一个非常幼稚的实现 import numpy as np from shapely geo
  • 实例新类型(Golang)

    谁能告诉我如何从字符串创建 Type 的新实例 反映 有一些示例 但它们适用于较旧的 Go 1 之前的版本 语言 所以 如果我正确理解你的问题 你是在问当你只有类型名称作为字符串时如何创建一个对象 例如 您可能有一个字符串 MyStruct