」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 可以替換嵌入的結構以換取GO中的方法遺傳嗎?

可以替換嵌入的結構以換取GO中的方法遺傳嗎?

發佈於2025-02-06
瀏覽:466

[2在不使用嵌入結構的情況下繼承類型方法的另一種方法。但是,它需要對GO的類型系統有更深入的了解。

嵌入structs   Can Embedded Structs Be Replaced for Method Inheritance in Go? 
在GO中,嵌入struct允許您訪問嵌入式struct的字段和方法好像它們是包含結構的一部分。這是一個功能強大的功能,可用於在類型之間創建繼承。

嵌入struct時,嵌入式結構的方法集不是自動晉升為包含結構。為了促進方法,嵌入式結構必須是匿名的。 方法pasterion

方法促銷是一種語言功能,允許從匿名嵌入式結構中訪問來自匿名嵌入的struct的方法它們是包含結構的方法。這是通過遵循以下規則來實現的:

接口{} func(p props)getstring(鍵字符串)字符串{ 返回p [鍵]。 (字符串) } 類型節點struct { 道具 } func main(){ 節點:= node {“ test”:“ foo”} fmt.println(node.getString(“ test”))//輸出:foo }

在此示例中,節點struct嵌入了類型props的匿名結構。 This allows the GetString method from Props to be promoted to Node.

Alternative Approach

An alternative approach without embedding is to use a pointer receiver.通過將指針傳遞給接收器函數,您可以訪問基礎結構的字段和方法,而無需嵌入。 使用指針接收器: type props map [string] interface {} func(p *props)getstring(鍵字符串)字符串{ 返回p [鍵]。 (字符串) } 類型節點struct { 道具 } func main(){ 節點:=&node {props {“ test”:“ foo”}} fmt.println(node.getString(“ test”))//輸出:foo }

在此示例中,我們為getString方法使用指針接收器。這使我們能夠訪問基礎道具結構的字段和方法,而無需嵌入它。

結論[&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&華並不總是最好的選擇。如果不需要或不需要方法促銷,則使用指針接收器可以提供更靈活,更性能的替代方案。

最新教學 更多>
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    使用(1)而不是(;;)會導致無限循環的性能差異? 現代編譯器,(1)和(;;)之間沒有性能差異。 是如何實現這些循環的技術分析在編譯器中: perl: S-> 7 8 unstack v-> 4 -e語法ok 在GCC中,兩者都循環到相同的彙編代碼中,如下所示:。 globl t_時 ...
    程式設計 發佈於2025-02-06
  • C#中靜態變量的功率和局限性是什麼?
    C#中靜態變量的功率和局限性是什麼?
    [2 [2 靜態變量是C#的基本功能,在面向對象的編程中起著重要作用。 與實例變量不同,它們獨立於任何特定對象,維護在類的所有實例中共享的單個值。 [2 幾個關鍵好處使靜態變量有價值: 數據共享:靜態變量為在多個類實例之間共享數據提供了方便的機制。 這對於管理全局常數,應用程序設置或跟踪共享狀...
    程式設計 發佈於2025-02-06
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-06
  • 為什麼MySQL返回錯誤2014:“當其他未封閉的查詢處於活動狀態時無法執行查詢”?
    為什麼MySQL返回錯誤2014:“當其他未封閉的查詢處於活動狀態時無法執行查詢”?
    的原因2014:無法執行查詢,而其他未封閉的查詢是活動的在執行無封閉的查詢並試圖執行另一個查詢之前從中撤回所有行時首先,MySQL返回錯誤“無法執行查詢,而其他未封閉的查詢處於活動狀態。” 仿真準備的語句 有幾種解決此錯誤的方法: 使用buffered Queries: 關閉光標:使用colle...
    程式設計 發佈於2025-02-06
  • 如何從PHP中的源URL中檢索重定向URL?
    如何從PHP中的源URL中檢索重定向URL?
    從php /S/2e34796f/l/0l0sliberoquotidiano0bit0cnews0c12735670ci0esaggi0eper0ele0er0er0eriforme0ecostituzionaliiechiactuiaieiechiaccherano0eee0eee0ee...
    程式設計 發佈於2025-02-06
  • 混合蛋白如何在沒有繼承的情況下提供可擴展的類功能?
    混合蛋白如何在沒有繼承的情況下提供可擴展的類功能?
    引入mixins:Intuitive class Extension無繼承概念在擴展類別的功能中起著至關重要的作用,而無需依賴傳統的繼承。 Mixins通常稱為“抽象子類”,為一個共同的挑戰提供了一種優雅的解決方案:結合正交概念,同時保持代碼模塊化和組合性。 理解了對Mixins 在軟件工程中,我...
    程式設計 發佈於2025-02-06
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    解決此問題,我們採用了一個巧妙的CSS解決方案來解決問題:高度:100%; 高度:auto ; 寬度:100%; //對於水平塊 ,使用絕對定位將圖像定位在中心,以object-fit:object-fit :cover in IE和edge消除了問題。現在,圖像將按比例擴展,保持所需的效果而不...
    程式設計 發佈於2025-02-06
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    </main> <section> ,但无法使其正常工作,如您所见。任何洞察力都将不胜感激! display:grid; { position:sticky; top:1em; z-index:1 1 ; { { { pos...
    程式設計 發佈於2025-02-06
  • 如何在XAMPP上創建虛擬主機?
    如何在XAMPP上創建虛擬主機?
    [2 。更新hosts文件 127.0.0.1 localhost 127.0.0.1 [主機域名] 2。配置虛擬host ” Servername [主機域名] 3。 XAMPP \ apache \ apache \ conf \ conf \ httpd.conf中的uncomme...
    程式設計 發佈於2025-02-06
  • 如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    [2使用內置的char_length()function。 char_length()和length() 此查詢將從指定的表中檢索所有行,並基於上升順序對它們進行排序指定列的字符長度。帶有更長字符串的行將出現在結果的底部。
    程式設計 發佈於2025-02-06
  • 在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在沒有密碼提示的情況下,如何在Ubuntu上安裝MySQL?
    在ubuntu 使用debconf-set-selections sudo debconf-set-selections
    程式設計 發佈於2025-02-06
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mysql組使用mysql組來調整查詢結果。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的基於列的轉換。通過子句以及條件匯總函數,例如總和或情況。讓我們考慮以下查詢: select d.data_timestamp, sum(data_id = 1 tata...
    程式設計 發佈於2025-02-06
  • 如何使用CSS檢測iPhone和iPad設備?
    如何使用CSS檢測iPhone和iPad設備?
    使用CSS檢測iPhone/iPad:故障排除和解決方案 iPhone and ipod touch: ipad: 通過將這些媒體查詢合併到樣式表中,您可以確保根據檢測到的設備類型應用特定的CSS樣式。這種方法提供了更大的靈活性,並允許您調整網站或應用程序的外觀到不同的iOS設備。
    程式設計 發佈於2025-02-06
  • 我應該在C ++中使用std :: string或std :: Wstring嗎?
    我應該在C ++中使用std :: string或std :: Wstring嗎?
    在C std :: string中的UTF-8,對Unicode術語有基本的理解是有幫助的: grapheme簇: std :: string vs. vs. vs.因素:[ 可移植:使用std :: u32String(std : : basic_string ),而不是std :: wcha...
    程式設計 發佈於2025-02-06
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣?使用openssl? 答案:可以使用mcrypt數據加密數據,可以使用openssl。關於如何使用openssl對McRypt進行加密的數據: openssl_decryp...
    程式設計 發佈於2025-02-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3