2017-10-14 6 views
0

In Go,Wie erhalten Sie Eigenschaften von geerbten Strukturen in Go? irgendwie

type PacketType1 struct { 
    myValue string 
} 
type PacketType2 struct { 
    myValue2 string 
} 

Kann ich passieren diese allgemein und dann den Typ überprüfen? Ich habe mir Schnittstellen angeschaut, aber diese scheinen Funktionen zu erben. Basierend auf den Namen, ist dies für ein Paketsystem, wie könnte ich eines dieser Pakete an eine Funktion als Argument übergeben, den Typ überprüfen und Eigenschaften von Strukturen usw. erhalten. Wenn dies nicht möglich ist, wie würde ich dann Am besten implementieren Sie ein Paket-System in Go?

Antwort

0

Es ist möglich, den Wert als interface{} zu übergeben und dann mit einem Typenschalter festzustellen, welcher Typ übergeben wurde. Alternativ können Sie eine Schnittstelle erstellen, die die von Ihnen benötigte allgemeine Funktionalität verfügbar macht und diese einfach verwendet.

Schnittstelle und Typ-Schalter:

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) 
    } 
} 

Common Interface:

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 
} 

Welche Methode ist am besten für Sie hängt genau auf, was Sie tun. Wenn die meisten Ihrer Typen ähnlich sind und kleine Unterschiede aufweisen, sind wahrscheinlich eine oder mehrere gängige Schnittstellen am besten. Wenn sie sehr unterschiedlich sind, ist ein Typwechsel möglicherweise besser. Welcher auch immer den kürzesten, klarsten Code erzeugt.

Manchmal ist es sogar am besten, eine Mischung der beiden Methoden zu verwenden ...

Verwandte Themen