在Go中,
void display(Line& line)
{
line.display();
}
int main() {
Line line1(10);
Line line2 = line1;
display(line1);
display(line2);
return 0;
}
我可以通过这些,然后以某种方式检查类型吗?我查看了接口,但这些似乎是用于继承函数。根据名称,这是一个数据包系统,我怎么能将这些数据包中的任何一个作为参数传递给函数,检查类型,获取结构的属性等。如果这是不可能的,那我该如何最好在Go中实现一个数据包系统?
答案 0 :(得分:0)
可以将值作为interface{}
传递,然后使用类型开关来检测传递的类型。或者,您可以创建一个界面,公开您需要的常用功能,并使用它。
接口和类型开关:
func Example(v interface{}){
switch v2 := v.(type) {
case PacketType1:
// Do stuff with v1 (which has type PacketType1 here)
case PacketType2:
// Do stuff with v1 (which has type PacketType2 here)
}
}
通用界面:
type Packet interface{
GetExample() string
// More methods as needed
}
// Not shown: Implementations of GetValue() for all types used
// with the following function
func Example(v Packet) {
// Call interface methods
}
哪种方法最适合您取决于您正在做什么。如果您的大多数类型相似且差异很小,则一个或多个常见接口可能是最佳的,如果它们完全不同,则类型切换可能更好。无论哪一个产生最短,最清晰的代码。
有时甚至最好使用两种方法的混合......