我需要帮助使此类型适用于任何类型。
我有一个函数,我需要接受具有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、用于延长函数的作用域 示例: 这里