当前位置: 首页 > 面试题库 >

Golang中的通用方法参数

甄华清
2023-03-14
问题内容

我需要帮助使此类型适用于任何类型。

我有一个函数,我需要接受具有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的参数中无法将人类([人类]类型)用作[]哺乳动物

有关更多详细信息,请参见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()函数中,您只能引用方法,而不能引用实现的字段:

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

这是 Go Playground 上的完整工作代码。



 类似资料:
  • 问题内容: 我对包含不带参数的泛型方法的代码感到困惑,所以这种方法的返回泛型类型是什么,例如: 这是通过以下方式调用的: 接口定义为: 我的问题:是否接受字符串,对象和所有内容。那么什么时候将通用返回类型指定为String呢? 问题答案: 编译器从 LHS 分配中使用的具体类型推断出类型。 从此链接: 如果类型参数未出现在方法参数的类型中,则编译器无法通过检查实际方法参数的类型来推断类型参数。如果

  • 问题内容: 要在中使用泛型类型,我们需要使用(无法获得泛型,其中T是泛型类“ ) 假设我有课 还有一些包装类 因此,如果我尝试执行此类操作,则一切正常。 但是当我尝试创建上述方法的通用变体时… …并像这样调用此方法… …而不是得到对象,我得到了对象。 我怎么解决这个问题?它是RestTemplate错误吗? 我了解这个概念。不幸的是我是在这里新注册的,所以我无法评论他的答案,所以在这里写下。林不知

  • 问题内容: 我想念什么?为什么我必须在下面使用而不是?它与泛型类型擦除有关系吗? 问题答案: 这与类型擦除无关。 查看错误消息: 的类有两个匹配由预期的功能的界面,方法方法。一个是静态的一个参数,而另一种是重写方法的。 编译器不知道您是否要执行此操作: 或这个 :

  • 本文向大家介绍golang 切片截取参数方法详解,包括了golang 切片截取参数方法详解的使用技巧和注意事项,需要的朋友参考一下 以 s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}为例 0. 建议:做slice截取时建议用两个参数,尤其是从底层数组进行切片操作时,因为这样在进行第一次append操作时,会给切片重新分配空间,这样减少切片对数组的影响。 1. 结论

  • Go 语言中的方法其实就是一个特殊函数,只不过这个函数是和某种属性类型绑定在一起的而已 Go 语言中的方法 一般用于 将 函数和结构体绑定在一起,让结构体除了能够保存数据外还能具备某些行为 将函数和数据类型绑定的格式 只需要在函数名称前面加上(接收者 数据类型),即可将函数和某种数据类型绑定在一起 func (接收者 数据类型)方法名称(形参列表)(返回值列表){ 方法体 } 示例:给结构

  • 本文向大家介绍JS中使用apply方法通过不同数量的参数调用函数的方法,包括了JS中使用apply方法通过不同数量的参数调用函数的方法的使用技巧和注意事项,需要的朋友参考一下 apply()方法定义 函数的apply()方法和call方法作用相同,区别在于接收的参数的方式不同。 apply()方法接收两个参数,一个是对象,一个是参数数组。 apply()作用 1、用于延长函数的作用域 示例: 这里