首先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是一種特殊的進階性語言,它既有解釋性語言的特征,也有編譯性語言的特征,因為它是經過先編譯,後解釋的過程。
<code>簡單說:HelloWorld.java————>HelloWolrd.class————>特定平台的機器代碼</code>
①編譯 ②解釋
文法簡潔。
簡單好記的關鍵詞和文法。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應用還是高一個數量級的,适合編寫—些瓶頸業務。記憶體占用也非常省。
為什麼要使用 Go 語言?Go 語言的優勢在哪裡?
Go計算機程式設計語言
程式設計語言傻傻分不清:弱類型、強類型、動态類型、靜态類型
作者:追逐時光者 作者簡介:一個熱愛程式設計,善于分享,喜歡學習、探索、嘗試新事物,新技術的程式猿。 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正确或錯誤的地方,歡迎指正、補充,不勝感激 !