上面的回答裏有這樣壹句話:
使用其他語言的經驗告訴我們,使用名稱相同但簽名不同的多個方法有時很有用,但也可能在實踐中造成混亂和脆弱。
然後它接著說:在圍棋的類型體系中,只按名稱匹配,要求類型相同,這是壹個簡化的主決策。
最後壹句:似乎比關於運算符重載的絕對要求更方便。同樣,如果沒有它,事情會更簡單。
整個解決方案非常漂亮簡潔。看完就明白了,Go語言的設計者沒有在Go中重載方法,並沒有什麽復雜的原因。核心原則是保持Go足夠簡單。也可以看出Go語言的設計者有很大的選擇余地和克制力。
其實,筆者認為超載本質上並沒有太大的現實意義。只是在表現力和表現形式上有些不同。在特定上下文中定義函數調用的關鍵是函數簽名。在支持重載的語言中,函數名和函數參數通常構成函數簽名。在Go中,妳可以認為函數名就是簽名。邏輯上沒有太大區別,就是臺前做工作和幕後做工作的區別。
當然,如果我們必須嚴肅對待,我們也許可以將參數寫成interface{}或...在Go中聲明方法時切片。傳入參數時做壹步驗證,判斷參數的類型和個數,然後分別處理。
不同的人有不同的看法。如果妳有不同的理解,歡迎和我們交流。