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

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

沒有方法的多態性

沒有方法的多態性

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

3 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

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

你不能這樣做。對不起。


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

TA貢獻1963條經驗 獲得超6個贊

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


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

    // handle it being the wrong type here

    return

}

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


查看完整回答
反對 回復 2023-06-12
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

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

在Go 之旅中了解有關空接口的更多信息


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

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

type item struct {

  typeSelector int

  t1Value t1

  t2Value t2

}

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


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


查看完整回答
反對 回復 2023-06-12
  • 3 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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