古詩詞大全網 - 藝術簽名 - 為什麽Go語言不支持重載?

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

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

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

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

然後它接著說:在圍棋的類型體系中,只按名稱匹配,要求類型相同,這是壹個簡化的主決策。

最後壹句:似乎比關於運算符重載的絕對要求更方便。同樣,如果沒有它,事情會更簡單。

整個解決方案非常漂亮簡潔。看完就明白了,Go語言的設計者沒有在Go中重載方法,並沒有什麽復雜的原因。核心原則是保持Go足夠簡單。也可以看出Go語言的設計者有很大的選擇余地和克制力。

其實,筆者認為超載本質上並沒有太大的現實意義。只是在表現力和表現形式上有些不同。在特定上下文中定義函數調用的關鍵是函數簽名。在支持重載的語言中,函數名和函數參數通常構成函數簽名。在Go中,妳可以認為函數名就是簽名。邏輯上沒有太大區別,就是臺前做工作和幕後做工作的區別。

當然,如果我們必須嚴肅對待,我們也許可以將參數寫成interface{}或...在Go中聲明方法時切片。傳入參數時做壹步驗證,判斷參數的類型和個數,然後分別處理。

不同的人有不同的看法。如果妳有不同的理解,歡迎和我們交流。