我想創建一個使用切片界面的函數。Go中的特定界面切片
例如我有一個接口ider
,它包含一個ID() string
函數。然後我有一個類型(Field
),它實現了ider
接口。現在我有不同的對象,其中有ider
作爲參數片。
在我的功能裏面,我期待一分ider
([]ider
)。該功能應該由不同類型使用,這些類型正在實施ider
。
這很難描述。因此,這裏是一個完整的例子,它輸出以下錯誤:
cannot use myObj.Fields (type []*Field) as type []ider in argument to inSlice
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"))
}
https://play.golang.org/p/p8PPH51vxP
我已經尋找答案,但我只是發現了空接口,而不是針對特定的人的解決方案。
可以使用idler接口來創建「fields」變量,如下所示:fields:= [] ider {{Field1}},} {}}。它運行在你去遊樂場的鏈接。 – mgagnon
[golang:slice of struct!=它實現的接口的切片?]的可能的副本(http://stackoverflow.com/questions/12994679/golang-slice-of-struct-slice-of-interface-it-implements) –
@mgagnon是的工作。我剛剛編輯了這個問題,因爲我的問題嵌套在一個附加類型中。 – apxp