我想创建一个函数,该函数使用接口的切片。
例如,我有一个接口 `ider` 包装了一个 `ID() string` 函数。 然后我有一个类型(`Field`),它实现了 `ider` 接口。 现在我有不同的对象,它们将 `ider` 的切片作为参数。
在我的功能内部,我期望一个 `ider` 切片(`[]ider`)。 该函数应由实现 `ider` 的不同类型使用。
这很难描述。 因此,以下是一个完整的示例,输出以下错误:
"无法将 myObj.Fields (类型 []*Field) 用作 inSlice 参数中的类型 []ider"
我已经搜索了答案,但只找到了空接口的解决方案,而没有针对特定类型的解决方案。
例如,我有一个接口 `ider` 包装了一个 `ID() string` 函数。 然后我有一个类型(`Field`),它实现了 `ider` 接口。 现在我有不同的对象,它们将 `ider` 的切片作为参数。
在我的功能内部,我期望一个 `ider` 切片(`[]ider`)。 该函数应由实现 `ider` 的不同类型使用。
这很难描述。 因此,以下是一个完整的示例,输出以下错误:
"无法将 myObj.Fields (类型 []*Field) 用作 inSlice 参数中的类型 []ider"
type ider interface {
ID() string
}
type Field struct {
Name string
}
// Implements ider interface
func (f *Field) ID() string {
return f.Name
}
type MyObject struct {
Fields []*Field
}
// uses slice of ider
func inSlice(idSlice []ider, s string) bool {
for _, v := range idSlice {
if s == v.ID() {
return true
}
}
return false
}
func main() {
fields := []*Field{
&Field{"Field1"},
}
myObj := MyObject{
Fields: fields,
}
fmt.Println(inSlice(myObj.Fields, "Field1"))
}
我已经搜索了答案,但只找到了空接口的解决方案,而没有针对特定类型的解决方案。