Maison > développement back-end > Golang > Comment puis-je utiliser des paramètres de méthode et des interfaces génériques pour traiter les deux tranches d'objets Mammifères et Humains dans Golang ?

Comment puis-je utiliser des paramètres de méthode et des interfaces génériques pour traiter les deux tranches d'objets Mammifères et Humains dans Golang ?

Barbara Streisand
Libérer: 2024-10-28 17:36:02
original
643 Les gens l'ont consulté

How can I use generic method parameters and interfaces to process both slices of Mammal and Human objects in Golang?

Paramètres de méthode génériques dans Golang

Dans Golang, pour permettre à une fonction d'accepter n'importe quel type, des paramètres de méthode génériques peuvent être utilisés. Lorsqu'une méthode nécessite un type possédant une propriété particulière, des interfaces peuvent être utilisées. Vous trouverez ci-dessous un exemple dans lequel une fonction doit accepter des types possédant une propriété ID.

<code class="go">type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}

func (h HumanImpl) GetHairColor() string {
    return h.HairColor
}</code>
Copier après la connexion

Dans ce code, les interfaces ont été définies ainsi que leurs implémentations intégrées pour Mammal et Humain. Cela garantit que les deux types peuvent être utilisés dans la fonction Count, qui accède désormais indirectement à la propriété ID via la méthode GetID.

<code class="go">func Count(ms []Mammal) *[]string {
   IDs := make([]string, len(ms))
   for i, m := range ms {
     IDs[i] = strconv.Itoa(m.GetID())
   }
   return &IDs
}</code>
Copier après la connexion

En utilisant des paramètres et des interfaces de méthode génériques, cette fonction peut désormais traiter à la fois des tranches d'objets Mammifère et Humain.

Voici le code de fonctionnement complet :

<code class="go">import (
    "fmt"
    "strconv"
)

type Mammal interface {
    GetID() int
    GetName() string
}

type Human interface {
    Mammal

    GetHairColor() string
}

type MammalImpl struct {
    ID   int
    Name string
}

func (m MammalImpl) GetID() int {
    return m.ID
}

func (m MammalImpl) GetName() string {
    return m.Name
}

type HumanImpl struct {
    MammalImpl
    HairColor string
}

func (h HumanImpl) GetHairColor() string {
    return h.HairColor
}

func Count(ms []Mammal) *[]string {
    IDs := make([]string, len(ms))
    for i, m := range ms {
        IDs[i] = strconv.Itoa(m.GetID())
    }
    return &IDs
}

func main() {
    mammals := []Mammal{
        MammalImpl{1, "Carnivorious"},
        MammalImpl{2, "Ominivorious"},
    }

    humans := []Mammal{
        HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"},
        HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"},
    }

    numberOfMammalIDs := Count(mammals)
    numberOfHumanIDs := Count(humans)
    fmt.Println(numberOfMammalIDs)
    fmt.Println(numberOfHumanIDs)
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal