代碼:package mainimport "fmt"type implementation struct { d []int}func (impl *implementation) getData() interface{} { return impl.d}type phase struct{}type data interface { getData() interface{}}func MakeIntDataPhase() *phase { return &phase{}}func (p *phase) run(population []data) []data { return nil}func main() { var population []implementation MyPhase := MakeIntDataPhase() fmt.Println(MyPhase.run(population))}在操場上運行以下代碼時出現(xiàn)以下錯誤:prog.go:30:25: cannot use population (type []implementation) as type []data in argument to MyPhase.run我是 golang 的新手,我不明白為什么會這樣?結(jié)構(gòu)從接口implementation實現(xiàn)方法。只用一片in方法還不夠嗎?getData()dataimplementationrun我的推理哪里錯了?
1 回答

BIG陽
TA貢獻1859條經(jīng)驗 獲得超6個贊
這似乎違反直覺,但由于切片類型在 Go 中的表示方式[]data
而屬于不同類型。[]implementation
考慮這個
var impl []*implementation
var data []data = impl
編譯器會抱怨
cannot use impl (type []*implementation) as type []data in assignment
這是更多的代碼,但實際上您必須按照該線程中的評論所建議的那樣創(chuàng)建界面的一部分,如下所示:
var impl []*implementation
var data []data
// assuming impl already has values
for _, v := range impl {
? ? data = append(data, v)
}
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報
0/150
提交
取消