當前位置:編程學習大全網 - 源碼下載 - 為什麽Go語言不支持重載?

為什麽Go語言不支持重載?

上圖是Golang官網FAQ的部分截圖,看來關於Go不支持重載的這個問題困擾了很多從面向對象語言轉到Go的開發者。官方在這裏做出了解答。

在上面的回答中有這樣壹句話:

其意思是: 使用其他語言的經驗告訴我們,使用具有相同名稱但簽名不同的多種方法有時會很有用,但在實踐中也可能會造成混淆和脆弱。

接下來又說: 在Go的類型系統中,僅按名稱進行匹配並要求類型壹致是壹個簡化的主要決定。

最後壹句話: 關於操作員重載,似乎比絕對要求更方便。 同樣,沒有它,事情會變得更簡單。

整個的解答非常漂亮、簡潔。我們看完之後就會理解,Go語言的設計者之所以沒有在Go中實現方法的重載,並沒有復雜的理由,核心原則就是: 讓Go保持足夠的簡單。 這也能看出來Go語言的設計者有著極大的選擇和克制。

其實,筆者認為重載在本質上並沒有很大的實際意義。只是表現力和表現形式上有壹定的差別。明確某個上下文中的函數調用的關鍵就是函數簽名,支持重載的語言中壹般是函數名加函數參數構成函數簽名。而Go中可以認為函數名就是簽名。邏輯上沒有太大的區別,就是把工作做在了臺前 還是幕後的區別。

當然如果非要較真的話,我們或許可以在Go中聲明方法的時候將參數寫成 interface{} 或者 ... 切片的方式。在傳進來參數的時候做壹步校驗,判斷參數的類型和個數,然後分別處理之。

仁者見仁智者見智,大家有什麽不同的理解歡迎壹起溝通。

  • 上一篇:校園運行源代碼
  • 下一篇:php與asp相比有什麽優缺點
  • copyright 2024編程學習大全網