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

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

沒有方法的多態(tài)性

沒有方法的多態(tài)性

Go
翻閱古今 2023-06-12 09:46:40
注意:我正在將這個問題編輯為一個具體示例,說明我為什么要這樣做,這就是為什么某些答案在上下文中可能不再有意義的原因。我正在編寫一些代碼來傳遞來自輸入的數(shù)據(jù)。數(shù)據(jù)采用標(biāo)簽的形式,這些標(biāo)簽具有它們包含的數(shù)據(jù)類型的標(biāo)識符,然后是數(shù)據(jù)。不幸的是,我無法控制輸入,并且事先不知道其中會有什么標(biāo)簽,一個可能是一個整數(shù),另一個可能是一個字符串,還有一個可能是一個整數(shù)數(shù)組。當(dāng)我需要像處理相同類型的所有標(biāo)簽時出現(xiàn)問題,例如,如果我有一片標(biāo)簽,一個接受或返回標(biāo)簽的函數(shù)。到目前為止,我所看到的解決方案是用一個空接口定義切片/函數(shù),這將允許我這樣做,但這有點不受歡迎,因為它不會告訴其他使用該包的人關(guān)于預(yù)期的類型并且也有點違背了首先使用類型化語言的觀點。然而,接口似乎是這里的解決方案,我希望有一個Tag接口可以傳遞,這確實需要我在它們上面定義方法,但實際上它們不需要任何方法。我目前的解決方案是這樣的type Tag interface{    implementTag()}type TagInt intfunc (tag TagInt) implementTag() {}type TagString stringfunc (tag TagInt) implementTag() {}雖然這確實有效并解決了我的問題,但必須為此定義虛擬方法感覺非常錯誤。所以我的問題總結(jié)如下:有沒有什么方法可以定義某物是 a 而Tag不必定義虛擬方法?
查看完整描述

3 回答

?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗 獲得超10個贊

現(xiàn)在想要制作一個可以同時容納 t1 和 t2 但沒有其他東西的切片。

你不能這樣做。對不起。


查看完整回答
反對 回復(fù) 2023-06-12
?
神不在的星期二

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

在您的場景中,我會做的是接受參數(shù)中帶有空接口的任何類型,然后在內(nèi)部使用類型斷言來確認(rèn)它是您想要的類型。


if t1, ok := interfaceInput.(t1); !ok{

    // handle it being the wrong type here

    return

}

此外,如果您想要數(shù)據(jù)類型與其方法(即對象)之間的緊密耦合,那么將它作為對象的方法有什么問題呢?


查看完整回答
反對 回復(fù) 2023-06-12
?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗 獲得超4個贊

您可以使用[]interface{}for “任何類型的切片”,但是您可以使用類型斷言和/或類型開關(guān)來發(fā)現(xiàn)該切片成員的實際運行時類型。

在Go 之旅中了解有關(guān)空接口的更多信息


現(xiàn)在想要制作一個可以同時容納 t1 和 t2 但沒有其他東西的切片。

這是一個非常不尋常的要求,您在 Go 中不太可能需要它。但是您也可以通過以下方式進(jìn)行自己的受歧視聯(lián)合:

type item struct {

  typeSelector int

  t1Value t1

  t2Value t2

}

然后使用[]item,typeSelector在運行時檢查以查看填充了哪個值。


或者,您甚至可以使用*t1and*t2和 havenil表示“此字段中沒有值”。


查看完整回答
反對 回復(fù) 2023-06-12
  • 3 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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