1、不支持繼承。結構體可以實現類似功能
2、面向對象?:yes and no
3、與java、python一樣,內置gc,不需要我們手動創建、釋放變量在內存中的佔用。區別是隻有go支持指針對內存的直接訪問
python幾乎全是引用傳遞,而go,統一採用值傳遞,但提供指針機制,用戶可以自己選擇數據的傳遞方式。
在編寫go時,要充分考慮指針,提高數據訪問效率(尤其是傳遞數據較大時),減少內存複製
4、錯誤處理機制,拋棄冗長繁瑣的try-catch-finally,當然,不少開發者認爲try-catch機制更好,在未來go發展也可能會加入try-catch機制。
5、併發控制:與主流語言通過共享內存實現。Go採用CSP模式。
兩個獨立的併發實體通過共享通訊Channel(管道)進行通信得併發模式
(tips, python併發機制:
Unix/Linux操作系統提供了一個fork()系統調用,它非常特殊。普通的函數調用,調用一次,返回一次,但是fork()調用一次,返回兩次,因爲操作系統自動把當前進程(稱爲父進程)複製了一份(稱爲子進程),然後,分別在父進程和子進程內返回。
子進程永遠返回0,而父進程返回子進程的ID。這樣做的理由是,一個父進程可以fork出很多子進程,所以,父進程要記下每個子進程的ID,而子進程只需要調用getppid()就可以拿到父進程的ID。
有了fork調用,一個進程在接到新任務時就可以複製出一個子進程來處理新任務,常見的Apache服務器就是由父進程監聽端口,每當有新的http請求時,就fork出子進程來處理新的http請求。)
6、Goroutine調度機制
goroutine的調度機制與java、python不同,前者是多對多(m:n)的對應關係,且不是由內核直接調度的線程機制效率高,但因爲goroutine的切換不設計內核級切換,所以代價小的多。後兩者線程模型是1:1的關係
併發只需一個:go function() 即可
7、靜態類型:
因爲變量類型已經定義好的,所以可以編譯爲靜態文件,不需要邊解釋邊執行(python就是邊解釋邊執行,因爲動態的特性,沒有執行到的地址,解釋器也不確定是什麼值),所以運行效率會很快
8、go代碼中可以不寫; 編譯器在編譯時會自動加上,也輕微提高了開發者的效率
如果對你有幫助,可否在文章右側點個贊再走呢~~
本文爲原創,轉載請註明出處