Golang 中的泛型方法参数

2023-11-23

我需要帮助才能使其适用于任何类型。

我有一个函数,我需要接受其他类型ID财产。

我尝试过使用接口,但这对我来说不起作用ID财产案。这是代码:

package main


import (
  "fmt"
  "strconv"
  )

type Mammal struct{
  ID int
  Name string 
}

type Human struct {  
  ID int
  Name string 
  HairColor string
}

func Count(ms []Mammal) *[]string { // How can i get this function to accept any type not just []Mammal
   IDs := make([]string, len(ms))
   for i, m := range ms {
     IDs[i] = strconv.Itoa(int(m.ID))
   }
   return &IDs
}

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

  humans := []Human{
    Human{ID:1, Name: "Peter", HairColor: "Black"},
    Human{ID:2, Name: "Paul", HairColor: "Red"},
  } 
  numberOfMammalIDs := Count(mammals)
  numberOfHumanIDs := Count(humans)
  fmt.Println(numberOfMammalIDs)
  fmt.Println(numberOfHumanIDs)
}

我明白了

错误 prog.go:39: 无法在 Count 的参数中使用人类(类型 []Human)作为类型 []Mammal

请参阅此处的 Go Playground 了解更多详细信息http://play.golang.org/p/xzWgjkzcmH


使用接口而不是具体类型,并使用嵌入式接口因此常用方法不必在两种类型中都列出:

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
}

但当然在你的Count()function 你只能引用方法而不是实现的字段:

IDs[i] = strconv.Itoa(m.GetID())  // Access ID via the method: GetID()

并创建哺乳动物和人类的切片:

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"},
}

这是完整的工作代码去游乐场.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang 中的泛型方法参数 的相关文章

随机推荐