Go是一門什么樣的語言?


Go語言基本介紹

  首先Go語言誕生於2007年由谷歌公司研發,2009年開源,2012年推出1.0版本,Go是一種語言層面支持並發(Go最大的特色、天生支持並發)、內置runtime,支持垃圾回收(GC)、靜態強類型,快速編譯的語言(編譯型語言)。

知識拓展:

靜態強類型語言是什么?

靜態強類型語言=靜態類型語言+強類型語言

動態類型語言和靜態類型語言

動態類型語言

動態類型語言和動態語言是完全不同的兩個概念。
動態類型語言:是指在運行期間才去做數據類型檢查的語言,說的是數據類型,
動態語言:說的是運行是改變結構,說的是代碼結構。
動態類型語言的數據類型不是在編譯階段決定的,而是把類型綁定延后到了運行階段。
主要語言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

靜態類型語言

靜態語言的數據類型是在編譯期間(或運行之前)確定的,編寫代碼的時候要明確確定變量的數據類型。
主要語言:C、C++、C#、Java、Object-C。

Go 語言是一種靜態類型的編程語言,所以在編譯器進行編譯的時候,就要知道每個值的類型,這樣編譯器就知道要為這個值分配多少內存,並且知道這段分配的內存表示什么。

提前知道值的類型的好處有很多,比如編譯器可以合理的使用這些值,可以進一步優化代碼,提高執行的效率,減少 bug 等等。

類型檢查

所進行的檢驗處理以及實行類型的約束,可發生在編譯時期(靜態檢查)或運行時期(動態檢查)

強類型與弱類型語言

強類型:

強類型語言是一種強制類型定義的語言,即一旦某一個變量被定義類型,如果不經強制轉換,那么它永遠就是該數據類型。

弱類型:

弱類型語言是一種弱類型定義的語言,某一個變量被定義類型,該變量可以根據環境變化自動進行轉換,不需要經過現行強制轉換。

編譯型語言和解釋型語言區別

類型

原理

優點

缺點

編譯型語言

通過專門的編譯器,將所有源代碼一次性轉換成特定平台(Windows、Linux 等)執行的機器碼(以可執行文件的形式存在)。

編譯一次后,脫離了編譯器也可以運行,並且運行效率高。

可移植性差,不夠靈活。

代表語言:C、C++、Pascal、Object-C、swift

解釋型語言

由專門的解釋器,根據需要將部分源代碼臨時轉換成特定平台的機器碼。

跨平台性好,通過不同的解釋器,將相同的源代碼解釋成不同平台下的機器碼。

一邊執行一邊轉換,效率很低。

代表語言:JavaScript、Python、Erlang、PHP、Perl、Ruby

混合型語言(特殊)

既然編譯型和解釋型各有缺點就會有人想到把兩種類型整合起來,取其精華去其糟粕。就出現了半編譯型語言。比如C#,C#在編譯的時候不是直接編譯成機器碼而是中間碼,.NET平台提供了中間語言運行庫運行中間碼,中間語言運行庫類CLR(CLR公共語言運行是讓 .NET 程序執行所需的外部服務的集合,.NET 平台的核心和最重要的組件,類似於 Java 的 JVM)。.NET在編譯成IL代碼后,保存在dll中,首次運行時由JIT在編譯成機器碼緩存在內存中,下次直接執行。我個人認為拋開一切的偏見C#是這個星球上最好的編程語言。可惜微軟的政策限制了C#的推廣。

Java是一種特殊的高級性語言,它既有解釋性語言的特征,也有編譯性語言的特征,因為它是經過先編譯,后解釋的過程。
簡單說:HelloWorld.java————>HelloWolrd.class————>特定平台的機器代碼
①編譯 ②解釋

Go語言的特點有哪些?

  • 語法簡潔。

簡單好記的關鍵詞和語法。golang語法簡單,這個是真的簡單,即使從來沒接觸過過編程的用戶,都可以輕松上手,比c++、java、.net更簡單易學,甚至比php學起來都輕松。與同為強類型語言的比c++比,更是簡單得多。雖然簡單,但是實現起功能來,一點也不含糊。

  • 開發效率高。

GO語言使用起來簡單、代碼描述效率高、編碼規范統一、上手快。 通過少量的代碼,即可實現框架的標准化,能快速的構建各種通用組件和公共類庫,進一步提升開發效率,實現特定場景下的功能量產。

  • 良好的語言設計。

從學術的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設計是非常優秀的:規范足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團隊協作的一致性。比如gofmt自動排版Go代碼,很大程度上杜絕了不同人寫的代碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有gofix, govet等非常有用的工具。

  • 部署簡單。

Go編譯生成的是一個靜態可執行的文件,除了glibc外沒有其他外部依賴。這讓部署變得非常的方便:目標機器上只需要一個基礎的系統和必要的管理、監控工具,完全不需要操心應用所需要的各種包、庫的依賴關系,大大減少了維護的負擔。

  • 並發性好。

Goroutine(Go輕量級線程)和channel使得編寫高並發的服務端軟件變得相當的容易,很多情況下完全可以不需要考慮鎖機制以及由此帶來的各種問題。單個Go應用也能有效的利用多個CPU核並行執行的性能好。

  • 執行性能強。

畢竟是類C的執行速度,對於一些服務來說,性能是極其重要的一環,事關系統的吞吐、訪問的延遲,進而會影響用戶的體驗,Go語言通過協程可以方便的實現並行處理,達到處理效率的最大化 ,提升系統的吞吐能力。

  • 執行性能好。

雖然不如C和Java,但通常比原生Python應用還是高一個數量級的,適合編寫—些瓶頸業務。內存占用也非常省。

參考

編程語言傻傻分不清:弱類型、強類型、動態類型、靜態類型

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM