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

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

具有接口類型和結(jié)構(gòu)指針的通道作為具體類型

具有接口類型和結(jié)構(gòu)指針的通道作為具體類型

Go
米琪卡哇伊 2023-05-15 10:33:54
我試圖概括我的一些代碼,我認(rèn)為我可以將一些通用代碼放在一起,但我遇到了類型系統(tǒng)問題。假設(shè)我有一個這樣的界面:type Hashable interface {    GetHash() []byte}我有幾個這樣的具體類型:type Transaction struct {    Hash                 []byte    `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`}func (m *Transaction) GetHash() []byte {    if m != nil {        return m.Hash    }    return nil}請注意,這些是由 生成的protoc,我可能無法輕易更改它們。雖然類型本身不實(shí)現(xiàn)Hashable,但如果我沒記錯的話,指向結(jié)構(gòu)的指針應(yīng)該實(shí)現(xiàn)。當(dāng)我創(chuàng)建一個接受類型通道的函數(shù)chan Hashable并嘗試傳入 a 時,問題就出現(xiàn)了chan *Transaction,如下所示:func consume(c chan Hashable) {    // Do something with the elements from c}func main() {    var c2 chan *Transaction    consume(c2)}我當(dāng)然可以創(chuàng)建一個新結(jié)構(gòu)來重新打包c(diǎn)onsume所需的字段,但這似乎是一個更糟糕的選擇。有沒有一個干凈的解決方案?
查看完整描述

1 回答

?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊

問題是:chan *Transaction不是接口 - 它是特定類型。所以它不能實(shí)現(xiàn)接口或chan Hashable本質(zhì)上。您需要使用特定的頻道。


您可以使用這樣的灌漿將Transaction值動態(tài)轉(zhuǎn)換為:Hashable


func convertor(ct chan *Transaction) chan Hashable {

    ch := make(chan Hashable)

    go func() {

        for t := range(ct) {

            ch <- Hashable(t)

        }


    }()

    return ch

}

并打電話


consume(convertor(c2))

https://play.golang.org/p/pd2EfhCehYz


查看完整回答
反對 回復(fù) 2023-05-15
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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