如何在Go中获取继承结构的属性?

时间:2017-10-14 18:07:49

标签: networking go

在Go中,

void display(Line& line)
{
    line.display();
}
int main() {
    Line line1(10);
    Line line2 = line1; 
    display(line1);
    display(line2);
    return 0;
}

我可以通过这些,然后以某种方式检查类型吗?我查看了接口,但这些似乎是用于继承函数。根据名称,这是一个数据包系统,我怎么能将这些数据包中的任何一个作为参数传递给函数,检查类型,获取结构的属性等。如果这是不可能的,那我该如何最好在Go中实现一个数据包系统?

1 个答案:

答案 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
}

哪种方法最适合您取决于您​​正在做什么。如果您的大多数类型相似且差异很小,则一个或多个常见接口可能是最佳的,如果它们完全不同,则类型切换可能更好。无论哪一个产生最短,最清晰的代码。

有时甚至最好使用两种方法的混合......