【发布时间】:2019-01-15 11:47:52
【问题描述】:
我正在做一个演示项目来理解 GO 语言。我定义了一个接口和两个结构类型。另外,我定义了一个接口数组。根据用户输入,我将数组中的每个元素定义为一种结构。在数据操作过程中,我想检查数组上定义的结构的类型。
我曾尝试使用反射,但不幸的是它没有奏效。互联网上的其他方法也不起作用。我收到了诸如 panic 或 json cannot Unmarshal 之类的消息。
type Main_interface interface {
}
type Struct1 struct {
Index int
ID int
Name string
}
type Struct2 struct {
Index int
Timestamp string
Temporary_ID int
}
var MyArray []Main_interface
//...
NewStruct1Block := generateStruct1Block(...)
MyArray = append(MyArray, NewStruct1Block)
//...
NewStruct2Block := generateStruct2Block(...)
MyArray = append(MyArray, NewStruct2Block)
更新:我希望能够检查在运行时实现接口的结构类型,具体取决于用户输入。
【问题讨论】:
-
尚不清楚您遇到了什么错误或您正在尝试做什么。有关类型断言的基础知识,请参阅此答案 stackoverflow.com/questions/38816843/… 和此 go 部分之旅 tour.golang.org/methods/15 - 也许这就是您要寻找的东西?
-
这里最好的建议可能是:不要尝试使用反射来理解发生了什么。反射是困难。即使您了解语言以及接口和类型系统如何工作,也很难。试图通过使用反射来增加对类型系统的理解注定要失败。
-
如果您尝试了某项操作但没有成功,请在您的问题正文中包含该代码,并附上有关它不起作用的方式的详细信息。
-
我尝试了以下两种解决方案。我通过硬编码在 main 中初始化数组的第一个元素。类型测试适用于该元素。其余元素根据用户输入进行初始化,返回的元素类型为接口类型。我不想要这个。我想要返回 Struct1 或 Struct2。
-
好的,您的问题的答案是
type assestion。在不了解您的特定要求的情况下,实际上不可能为您提供一个完全正常工作的应用程序(并且此资源不用于此目的),因为目前它们看起来有点混乱。
标签: go