首页  >  文章  >  后端开发  >  如何使用通用方法参数和接口来处理 Golang 中的哺乳动物和人类对象切片?

如何使用通用方法参数和接口来处理 Golang 中的哺乳动物和人类对象切片?

Barbara Streisand
Barbara Streisand原创
2024-10-28 17:36:02581浏览

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

Golang 中的泛型方法参数

在 Golang 中,为了使函数能够接受任何类型,可以使用泛型方法参数。当方法需要具有特定属性的类型时,可以使用接口。下面是一个函数需要接受具有 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>

在此代码中,已定义接口及其嵌入式实现 Mammal人类。这确保了这两种类型都可以在 Count 函数中使用,该函数现在通过 GetID 方法间接访问 ID 属性。

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

通过使用通用方法参数和接口,该函数现在可以处理 MammalHuman 对象的切片。

以下是完整的工作代码:

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

以上是如何使用通用方法参数和接口来处理 Golang 中的哺乳动物和人类对象切片?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn