2017-10-14 7 views
0

Dans Go,Comment obtenir les propriétés des structures héritées à Go?

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

Puis-je transmettre ces génériquement puis vérifier le type en quelque sorte? J'ai regardé dans les interfaces, mais ceux-ci semblent être pour hériter des fonctions. Basé sur les noms, ceci est pour un système de paquets, comment pourrais-je passer n'importe lequel de ces paquets à une fonction en tant qu'argument, vérifier le type et obtenir les propriétés des structures, etc. Si cela n'est pas possible, alors comment mieux implémenter un système de paquets dans Go?

Répondre

0

Il est possible de transmettre la valeur interface{}, puis d'utiliser un commutateur de type pour détecter le type transmis. Alternativement, vous pouvez créer une interface qui expose les fonctionnalités communes dont vous avez besoin et simplement l'utiliser.

Interface et commutateur Type:

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

Interface commune:

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 
} 

Quelle est la meilleure méthode pour vous dépend de ce que vous faites. Si la plupart de vos types sont similaires avec de petites différences, une ou plusieurs interfaces communes sont probablement les meilleures, si elles sont assez différentes, un changement de type peut être meilleur. Celui qui produit le code le plus court et le plus clair.

Parfois, il est même préférable d'utiliser un mélange des deux méthodes ...