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>
通过使用通用方法参数和接口,该函数现在可以处理 Mammal 和 Human 对象的切片。
以下是完整的工作代码:
<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中文网其他相关文章!