第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何滿足通過嵌入泛型實現(xiàn)的約束?

如何滿足通過嵌入泛型實現(xiàn)的約束?

Go
楊魅力 2022-12-26 15:41:37
我有一個界面type FooInterface interface {    HasName() bool}它有一個我打算在 FooInterface 的其他實現(xiàn)中使用的基本實現(xiàn)type FooBoilerplate struct {    hasName bool}func (f *FooBoilerplate) HasName() bool {    return f.hasName}像這樣type Foo1 struct {    fooId int    FooBoilerplate}func (f *Foo1) GetId() int {    return f.fooId}我想使用泛型為 FooInterface 創(chuàng)建一個容器類type FooContainer[T FooInterface] struct {    list []T}func (fc *FooContainer[T]) AddItem() {    var t T    fc.list = append(fc.list, t)}但是,當(dāng)我嘗試實例化容器時出現(xiàn)編譯錯誤func RunThis() {    foo1 := Foo1{FooBoilerplate: FooBoilerplate{hasName: false}}    // works fine    TakesFooInterface(&foo1)    // doesnt compile    fc := FooContainer[Foo1]{}    fc.AddItem()}不確定為什么 Foo1 在傳遞給函數(shù)時被視為實現(xiàn) FooInterface,但在傳遞給容器結(jié)構(gòu)時卻沒有。我也不能將對象傳遞給容器實例化。
查看完整描述

2 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

Foo1不執(zhí)行FooInterface。*Foo1做。無論接口是用作函數(shù)參數(shù)的類型還是用作約束,都是如此。

這就是為什么您將&foo1(type *Foo1) 傳遞給TakesFooInterface而不是foo1(type Foo1) 的原因。

同樣對于類型參數(shù),您應(yīng)該實例化通用類型*Foo1

fc := FooContainer[*Foo1]{}


查看完整回答
反對 回復(fù) 2022-12-26
?
jeck貓

TA貢獻1909條經(jīng)驗 獲得超7個贊

我假設(shè)你的 TakesFooInterface 是這樣的:

func TakesFooInterface(foo1 FooInterface) {
   ...
}

然后調(diào)用 TakesFooInterface(foo1) 編譯失敗,因為 foo1 沒有實現(xiàn) FooInterface,而是 &foo1。

與您的一般情況相同,該Foo1類型沒有實現(xiàn) FooInterface ,它需要在方法中訪問指針,HasName*Foo1類型需要。

我已經(jīng)在 Go.Dev 上復(fù)制了你的代碼和一些嘗試:https ://go.dev/play/p/3I2mtabi-ub


查看完整回答
反對 回復(fù) 2022-12-26
  • 2 回答
  • 0 關(guān)注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號