创建扩展类型数组
我有一个结构体 A,用结构体 B 扩展(“子类化”)它,如下所示:
package main
type A struct {
x int
}
type B struct {
A
y int
}
我想创建一个数组,在其中可以将 A 或 B 附加到它,以便此代码可以工作:
func main() {
var m [2]B
m[0] = B { A { 1 }, 2 }
m[0].x = 0
m[0].y = 0
m[1] = A { 3 }
m[1].x = 0
}
但它不能。如果我创建 B 类型的数组,我会得到“不能在赋值中使用结构体文字(A 类型)作为 B 类型”。如果我尝试创建类型 A 的数组,我会得到相同的错误(只是类型相反)。
所以我的问题是:数组应该是什么类型?
I have a struct A, extending ("subclassing") it with struct B, like this:
package main
type A struct {
x int
}
type B struct {
A
y int
}
I want to create a array where I can append A or B to it, so that this code works:
func main() {
var m [2]B
m[0] = B { A { 1 }, 2 }
m[0].x = 0
m[0].y = 0
m[1] = A { 3 }
m[1].x = 0
}
It doesn't. If I create the array of the type B, I get "cannot use struct literal (type A) as type B in assignment". If I try to create the array of the type A, I get the the same error (just with the types reversed).
So my question is: which type should the array be?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 struct 值。例如,
或者,您可以使用 struct 指针。例如,
You could use
struct
values. For example,Or, you could use
struct
pointers. For example,您需要将数组类型定义为
interface{}
而不是B
。然后你可以将这两种类型存储在那里。这是实现这一目标的唯一方法。如果两种类型都实现特定接口,那么您可以键入该接口,而不是通用接口{}
You'll want to define the array type to
interface{}
rather thanB
. Then you can store both types in there. That's the only way to accomplish this. If both types implement a specific interface, then you can type to that instead of the genericinterface{}