區別:1、Go不允許函數重載,java允許;2、Java預設允許多態,Go沒有;3、Go用HTTP協定進行路由配置,java不是;4、Go程式碼可以自動擴展到多個核心,而Java並不總是具有足夠的可擴展性;5、Java物件的方法會有隱藏this指標傳遞,Go沒有;6、Java不支援多繼承,Go支援多繼承;7、 GO採用的是非侵入式接口,而java不是。
本教學操作環境:windows7系統、GO 1.18&&java8版本、Dell G3電腦。
一、關於Java
#1、Java的用途
首先我們回顧下Java的主要用途與應用場景:
用途一:伺服器後端系統開發(web後端、微服務後端支付系統、業務系統、管理後台,各種後台交互的介面服務)。
用途二:大資料框架的底層實作和Java的API支援。 (Hadoop)。
用途三:其它中間件的底層開發。 (Tomcat、RocketMq、Hbase、Kafka(部分)、SpringCloud,Dubbo...)。
2、Java的優點和特性
#做服務端系統效能高。
有虛擬機,跨平台。
功能強大,支援的類別庫多,生態圈類別庫多,開發框架和工具更容易找到。
市場佔有率高,約60%的中國程式設計師都是做Java相關的工作。
二、關於Go
#1、Go的出生原因
##Go語言是Google內部公司大佬開發的,主要起因於Google公司有大量的C程序項目,但是開發起來效率太低,維護成本高,於是就開發了Go語言來提高效率,而且性能只是差一點。天然的適用一些特定係統的開發,例如區塊鏈類系統(如以太坊底層系統、以太坊上層應用程式),雲端運算和容器(Docker,K8s底層都是go開發的)開發的(大公司自研運維管理專案也大多是用go做底層的開發),網路程式設計(類似java的Netty)。
三、Go語言與Java的具體差異 #1、函數重載# Go上不允許函數重載,必須有方法和函數的唯一名稱。 java允許函數重載。 2、多態Java預設允許多態。而,Go沒有。 Java中的多態實作遵循一個原則:當超類別物件引用變數引用子類別物件時,被引用物件的類型而不是引用變數的類型決定了呼叫誰的成員方法,但是這個被呼叫的方法必須是在超類別中定義過的,也就是說被子類別覆蓋的方法。 Java中的多態可以透過基於繼承和基於介面兩種方法來實現。 而在go語言一般不允許不同類型的賦值,即不支持傳統的多型態。 interface是一個例外,可以用不同類型進行賦值只要一個類型實現了該接口,我們就可以將該類型的變數賦給該接口的變數。 3、路由設定Go語言使用HTTP協定進行路由設定;而java使用Akka.routing.ConsistentHashingRouter和Akka.routing.ScatterGatherFirstCompletedRouter進行路由設定。 4、可擴展性######Go程式碼可以自動擴展到多個核心;而,Java並不總是具有足夠的可擴展性。 ######5、物件傳遞:###Java中物件的方法會有隱藏的this指針傳遞,而Go語言中物件導向只是換了一種語法形式來表達,沒有隱藏的this指針,即方法施加的目標顯示傳遞,沒有被隱藏。另外方法施加的目標不一定是指標(java傳遞的是指向物件的指標),如果是指標也可以不命名為this。
6、繼承:
Java的繼承透過extends關鍵字完成,不支援多重繼承。 Go語言的繼承透過匿名組合完成:基底類別以Struct的方式定義,子類別只需要把基底類別當作成員放在子類別的定義中,並且可以透過調整基底類別成員的位置改變記憶體佈局,支援多重繼承。
7、介面:
java中的介面作為不同元件中的契約存在,是強制的,類別必須宣告實作了某個接口,需要從該介面繼承。就算是兩個一模一樣的接口但只有名字不一樣,也只能根據類別所聲明的實作接口是否包括該接口來決定該類別是否實作該接口,叫做「侵入式」的接口。
而GO語言中採用的是非侵入式接口,一個類別只需要實作接口要求的所有函數,那我們就說該類別實作了該接口。 GO語言可以透過介面進行介面查詢(介面指向的物件是否實現了另外的介面),類型查詢等。
以上是go語言和java的差別有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!