我正在嘗試在 1.18beta2 中使用泛型,并且正在嘗試為鍵/值存儲 boltdb 編寫一個抽象層。這就是我試圖用它實現的目標。type Reader interface { Read(bucket []byte, k ...[]byte) ([][]byte, error) ReadDoc[V Unmarshaler](bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)}type Unmarshaler interface { UnmarshalKV(v []byte) error}這樣我就可以為它提供一個工廠來在它找到鍵/值時創建類型,將數據解組到其中并返回該特定類型的切片。只有我從編譯器得到“接口方法必須沒有類型參數”。為什么接口中不允許類型參數?是否有計劃支持這個?這粉碎了我的夢想......本來是完美的。然而,它確實在界面之外工作。
1 回答

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
今天早些時候遇到了同樣的問題。這似乎是泛型/類型參數的設計決策,因為在接口定義(和實現工作)中可能有多種解釋具有類型參數的方法的“方式”。
在某些情況下,它可能意味著:
不保留參數的身份。
需要在編譯時遍歷整個樹,這會影響性能。
需要在運行時進行反射,這會影響性能。
參數化方法不實現接口,這會導致混亂。
類型參數提案中的更多信息,無參數化方法
但是,您可以將類型參數移動到接口類型定義中。建議,非常高級的概述:
type Reader[V Unmarshaler] interface {
Read(bucket []byte, k ...[]byte) ([][]byte, error)
ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}
type Unmarshaler interface {
UnmarshalKV(v []byte) error
}
- 1 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消