Go語言 簡介

2023-02-16 17:40 更新

Go是一門編譯型的和靜態(tài)的編程語言。 Go誕生于谷歌研究院。 Go的核心設(shè)計成員中包括很多有著數(shù)十年編程語言研究領(lǐng)域經(jīng)驗的研究者。

Go有很多特性,有一些是獨特的,有一些借鑒于一些其它編程語言:

  • 內(nèi)置并發(fā)編程支持:
    • 使用協(xié)程(goroutine)做為基本的計算單元。輕松地創(chuàng)建協(xié)程。
    • 使用通道(channel)來實現(xiàn)協(xié)程間的同步和通信。
  • 內(nèi)置了映射(map)和切片(slice)類型。
  • 支持多態(tài)(polymorphism)。
  • 使用接口(interface)來實現(xiàn)裝盒(value boxing)和反射(reflection)。
  • 支持指針。
  • 支持函數(shù)閉包(closure)。
  • 支持方法。
  • 支持延遲函數(shù)調(diào)用(defer)。
  • 支持類型內(nèi)嵌(type embedding)。
  • 支持類型推斷(type deduction or type inference)。
  • 內(nèi)存安全。
  • 自動垃圾回收。
  • 良好的代碼跨平臺性。
  • 自定義泛型(從Go 1.18開始)。

除了以上特性,Go還有如下亮點:

  • Go的語法很簡潔并且和其它流行語言相似。 這使得具有一定編程經(jīng)驗的程序員很容易上手Go編程。 當然,對于沒有編程經(jīng)驗的初學者,Go也比很多其它流行編程語言更容易上手一些。
  • Go擁有一個比較齊全的標準庫。這個標準庫提供了很多常用的功能。
  • Go擁有一個活躍和回應(yīng)快速的社區(qū)。 社區(qū)貢獻了大量高質(zhì)量的第三方庫包和應(yīng)用。

Go程序員常常被稱為地鼠(gopher)。

上面已經(jīng)提到,Go屬于編譯型的靜態(tài)語言。但是Go的很多特性使得用Go編程像使用動態(tài)腳本語言一樣的靈活。 一般很難將靜態(tài)語言的嚴格性和動態(tài)語言靈活性的優(yōu)點合二為一。但是Go做到了這一點。 當然,合二為一也會不可避免地帶來一些弊端。 但是,對于Go來說,合二為一帶來的好處遠多于合二為一的帶來的弊端。

可讀性是在Go語言的設(shè)計中一個非常重要的考慮因素。 一個Go程序員常常可以輕松讀懂其他Go程序員寫的代碼。 甚至對于一個沒有Go編程經(jīng)驗但具有其它語言編程經(jīng)驗的程序員來說,讀懂一份Go源碼也不是一件難事。

目前,使用最廣泛的Go編譯器由Go官方設(shè)計和開發(fā)團隊維護。 以后我們將稱此編譯器為標準編譯器。標準編譯器也常常稱為gc(是Go compiler的縮寫,不是垃圾回收garbage collection的縮寫)。 Go官方設(shè)計和開發(fā)團隊也維護著另外一個編譯器,gccgo。 gccgo是gcc編譯器項目的一個子項目。 gccgo的使用廣泛度大不如gc, 它的主要作用是做為一個參考,來保證gc的實現(xiàn)正確性。 目前兩個編譯器的開發(fā)都很活躍,盡管Go開發(fā)團隊在gc的開發(fā)上花費的精力更多。

gc編譯器是Go官方工具鏈中一個組件。 Go官方工具鏈的使用將在下一篇文章中介紹。 Go官方工具鏈1.0發(fā)布于2012年三月。 Go語言規(guī)范的最新版本和Go官方工具鏈的最新版本總是保持一致。 每年Go官方工具鏈發(fā)行兩個主版本。

自從Go語言正式發(fā)布后,Go的語法變化很小。 但是標準編譯器gc卻在不斷地改進。 使用早期的gc編譯的程序在運行的時候在每次垃圾回收的結(jié)尾常常會有明顯的停頓。 但是自從Go 1.8,使用gc編譯的程序在運行時刻已經(jīng)基本消除了停頓現(xiàn)象。

gc支持跨平臺編譯。 比如,我們可以在Linux平臺上編譯出Windows程序,反之亦然。

使用Go編寫的程序常常編譯得非常快。 編譯時間的長短是開發(fā)愉悅度的一個重要因素。 編譯時間短是很多程序員喜歡Go的一個原因。

Go程序生成的二進制可執(zhí)行文件常常擁有以下優(yōu)點:

  • 內(nèi)存消耗少
  • 執(zhí)行速度快
  • 啟動快

很多C家族語言,比如C/C++/Rust等,也擁有上述的優(yōu)點。 但它們?nèi)鄙貵o語言的幾個重要優(yōu)點:

  • 程序編譯時間短
  • 像動態(tài)語言一樣靈活
  • 內(nèi)置并發(fā)支持

上面所有提到的優(yōu)點使得Go成為一個出眾的編程語言。 對于很多項目來說,Go是一個相當不錯的選擇。 目前,Go主要用于網(wǎng)絡(luò)開發(fā)、系統(tǒng)工具開發(fā)、數(shù)據(jù)庫開發(fā)和區(qū)塊鏈開發(fā)。 隨著從Go 1.18開始支持自定義泛型,預期Go會在更多開發(fā)領(lǐng)域流行起來,比如圖形界面、游戲、大數(shù)據(jù)和人工智能等。

最后,我們應(yīng)該知道,沒有一門語言是完美的。Go也一樣。Go的設(shè)計中有很多折衷和各種權(quán)衡。Go 1確實有一些不足。 比如,目前Go不支持任意類型的不變量。這導致很多標準庫中一些希望永不被更改的值目前被聲明為變量。這是Go程序中的一個潛在安全隱患。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號