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
Barbara Streisandoriginal
2024-10-28 17:36:02638parcourir

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>

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>

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>

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!

Déclaration:
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