亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解決“接口方法必須沒有類型參數”?

如何解決“接口方法必須沒有類型參數”?

Go
拉莫斯之舞 2022-11-08 16:05:27
我正在嘗試在 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

}


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號