Go語(yǔ)言 簡(jiǎn)介

2023-02-16 17:40 更新

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

Go有很多特性,有一些是獨(dú)特的,有一些借鑒于一些其它編程語(yǔ)言:

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

除了以上特性,Go還有如下亮點(diǎn):

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

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

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

可讀性是在Go語(yǔ)言的設(shè)計(jì)中一個(gè)非常重要的考慮因素。 一個(gè)Go程序員常??梢暂p松讀懂其他Go程序員寫的代碼。 甚至對(duì)于一個(gè)沒(méi)有Go編程經(jīng)驗(yàn)但具有其它語(yǔ)言編程經(jīng)驗(yàn)的程序員來(lái)說(shuō),讀懂一份Go源碼也不是一件難事。

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

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

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

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

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

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

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

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)