溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

golang基礎(chǔ)介紹

發(fā)布時(shí)間:2020-06-03 14:46:50 來(lái)源:億速云 閱讀:331 作者:Leah 欄目:編程語(yǔ)言

這篇文章主要為大家詳細(xì)介紹go語(yǔ)言的基礎(chǔ),包括go語(yǔ)言的發(fā)展歷史、go語(yǔ)言的繼承、go語(yǔ)言的優(yōu)勢(shì)和特點(diǎn)以及go語(yǔ)言的應(yīng)用領(lǐng)域,感興趣的小伙伴們可以參考一下。

簡(jiǎn)介

  • Go(又稱(chēng)Golang)是Google開(kāi)發(fā)的一種靜態(tài)強(qiáng)類(lèi)型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言

  • Go的最初目標(biāo)是消除Google軟件開(kāi)發(fā)的緩慢性和笨拙性,從而使流程更具效率和可擴(kuò)展性,更多的關(guān)注于軟件工程領(lǐng)域

  • Go致力于解決當(dāng)代大型工程項(xiàng)目面臨的多核處理,網(wǎng)絡(luò)系統(tǒng),海量計(jì)算集群、快速構(gòu)建等問(wèn)題,Go在語(yǔ)言級(jí)別考慮并發(fā)問(wèn)題,提供簡(jiǎn)單高效的并發(fā)編程

  • 羅伯特·格瑞史莫(Robert Griesemer),羅勃·派克(Rob Pike)及肯·湯普遜(Ken Thompson)于2007年9月開(kāi)始設(shè)計(jì)Go,稍后Ian Lance Taylor、Russ Cox加入項(xiàng)目

  • Go是基于Inferno操作系統(tǒng)所開(kāi)發(fā)的

  • Go于2009年11月正式宣布推出,成為開(kāi)放源代碼項(xiàng)目,支持Linux、macOS、Windows等操作系統(tǒng)

  • 在2016年,Go被軟件評(píng)價(jià)公司TIOBE 選為“TIOBE 2016 年最佳語(yǔ)言”

  • 很多重要的開(kāi)源項(xiàng)目都是使用Go語(yǔ)言開(kāi)發(fā)的,其中包括 Docker、Go-Ethereum、Thrraform、Kubernetes、etcd、hyperledger、tidb

基本語(yǔ)言的歷史

  • 1960年 Ken Thompson(肯.湯普森) 發(fā)明了B語(yǔ)言

  • 1972年 Dennis Ritchie(丹尼斯·里奇)發(fā)明了C語(yǔ)言

  • 1982年 Bjarne Stroustrup(本賈尼)發(fā)明了C++語(yǔ)言

  • 1989年 Guido von Rossum 發(fā)明了Python語(yǔ)言

  • 1995年SUN公司發(fā)明了Java語(yǔ)言

  • 2007年Go語(yǔ)言誕生

  • 2009年的11月對(duì)外正式發(fā)布

Go語(yǔ)言創(chuàng)始人

對(duì)語(yǔ)言進(jìn)行評(píng)估時(shí),明白設(shè)計(jì)者的動(dòng)機(jī)以及語(yǔ)言要解決的問(wèn)題很重要。Go語(yǔ)言出自 Ken Thompson 和 Rob Pike、Robert Griesemer 之手,他們都是計(jì)算機(jī)科學(xué)領(lǐng)域的重量級(jí)人物。

  • Ken Thompson
    貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,C語(yǔ)言、Unix 和 Plan 9 的創(chuàng)始人之一,在 20 世紀(jì) 70 年代,設(shè)計(jì)并實(shí)現(xiàn)了最初的 UNIX 操作系統(tǒng),僅從這一點(diǎn)說(shuō),他對(duì)計(jì)算機(jī)科學(xué)的貢獻(xiàn)怎么強(qiáng)調(diào)都不過(guò)分。他還與 Rob Pike 合作設(shè)計(jì)了 UTF-8 編碼方案

  • Rob Pike
    Go語(yǔ)言項(xiàng)目總負(fù)責(zé)人,貝爾實(shí)驗(yàn)室 Unix 團(tuán)隊(duì)成員,除幫助設(shè)計(jì) UTF-8 外,還幫助開(kāi)發(fā)了分布式多用戶(hù)操作系統(tǒng) Plan 9、Inferno 操作系統(tǒng)和 Limbo 編程語(yǔ)言,并與人合著了《The Unix Programming Environment》,對(duì) UNIX 的設(shè)計(jì)理念做了正統(tǒng)的闡述

  • Robert Griesemer
    就職于 Google,參與開(kāi)發(fā) Java HotSpot 虛擬機(jī),對(duì)語(yǔ)言設(shè)計(jì)有深入的認(rèn)識(shí),并負(fù)責(zé) Chrome 瀏覽器和 Node.js 使用的 Google V8 JavaScript 引擎的代碼生成部分

go語(yǔ)言的繼承

  • Go語(yǔ)言有時(shí)候被描述為“C類(lèi)似語(yǔ)言”,或者是“21世紀(jì)的C語(yǔ)言”

  • Go從C語(yǔ)言繼承了相似的表達(dá)式語(yǔ)法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類(lèi)型、調(diào)用參數(shù)傳值、指針等思想

  • Go繼承了C語(yǔ)言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無(wú)縫適配

  • Go語(yǔ)言的家族樹(shù)中還有其它的祖先。其中一個(gè)有影響力的分支來(lái)自Niklaus Wirth所設(shè)計(jì)的Pascal語(yǔ)言

  • Modula-2語(yǔ)言激發(fā)了包的概念,然后Oberon語(yǔ)言摒棄了模塊接口文件和模塊實(shí)現(xiàn)文件之間的區(qū)別。第二代的Oberon-2語(yǔ)言直接影響了包的導(dǎo)入和聲明的語(yǔ)法,還有Oberon語(yǔ)言的面向?qū)ο筇匦运峁┑姆椒ǖ穆暶髡Z(yǔ)法等

  • Go語(yǔ)言的另一支祖先,帶來(lái)了Go語(yǔ)言區(qū)別其他語(yǔ)言的重要特性,靈感來(lái)自于貝爾實(shí)驗(yàn)室的Tony Hoare于1978年發(fā)表的鮮為外界所知的關(guān)于并發(fā)研究的基礎(chǔ)文獻(xiàn)順序通信進(jìn)程(communicating sequential processes,縮寫(xiě)為CSP)

    • 在CSP中,程序是一組中間沒(méi)有共享狀態(tài)的平行運(yùn)行的處理過(guò)程,它們之間使用管道進(jìn)行通信和控制同步。不過(guò)Tony Hoare的CSP只是一個(gè)用于描述并發(fā)性基本概念的描述語(yǔ)言,并不是一個(gè)可以編寫(xiě)可執(zhí)行程序的通用編程語(yǔ)言

    • Rob Pike和其他人開(kāi)始不斷嘗試將CSP引入實(shí)際的編程語(yǔ)言中。他們第一次嘗試引入CSP特性的編程語(yǔ)言叫Squeak,是一個(gè)提供鼠標(biāo)和鍵盤(pán)事件處理的編程語(yǔ)言,它的管道是靜態(tài)創(chuàng)建的

    • 然后是改進(jìn)版的Newsqueak語(yǔ)言,提供了類(lèi)似C語(yǔ)言語(yǔ)句和表達(dá)式的語(yǔ)法和類(lèi)似Pascal語(yǔ)言的推導(dǎo)語(yǔ)法。Newsqueak是一個(gè)帶垃圾回收的純函數(shù)式語(yǔ)言,它再次針對(duì)鍵盤(pán)、鼠標(biāo)和窗口事件管理。在Newsqueak語(yǔ)言中管道是動(dòng)態(tài)創(chuàng)建的,屬于第一等公民,可以保存到變量中

    • 在Plan9操作系統(tǒng)中,這些優(yōu)秀的想法被吸收到了一個(gè)叫Alef的編程語(yǔ)言中。Alef試圖將Newsqueak語(yǔ)言改造為系統(tǒng)編程語(yǔ)言,但是因?yàn)槿鄙倮厥諜C(jī)制而導(dǎo)致并發(fā)編程很痛苦

    • 注:在Aelf之后還有一個(gè)叫Limbo的編程語(yǔ)言,Go語(yǔ)言從其中借鑒了很多特性。具體請(qǐng)參考Pike的講稿:talks.golang.org/2012/c


  • Go語(yǔ)言的其他的一些特性零散地來(lái)自于其他一些編程語(yǔ)言;比如iota語(yǔ)法是從APL語(yǔ)言借鑒,詞法作用域與嵌套函數(shù)來(lái)自于Scheme語(yǔ)言和其他很多語(yǔ)言

  • Go中也有很多創(chuàng)新的設(shè)計(jì),比如Go語(yǔ)言的切片為動(dòng)態(tài)數(shù)組提供了有效的隨機(jī)存取的性能,還有Go語(yǔ)言新發(fā)明的defer語(yǔ)句

go語(yǔ)言的特點(diǎn)

所有的編程語(yǔ)言都反映了語(yǔ)言設(shè)計(jì)者對(duì)編程哲學(xué)的反思,通常包括之前的語(yǔ)言所暴露的一些不足地方的改進(jìn)。

  • 簡(jiǎn)潔

    • Go項(xiàng)目是在Google公司維護(hù)超級(jí)復(fù)雜的幾個(gè)軟件系統(tǒng)遇到的一些問(wèn)題的反思(但是這類(lèi)問(wèn)題絕不是Google公司所特有的)

    • 正如Rob Pike所說(shuō),“軟件的復(fù)雜性是乘法級(jí)相關(guān)的”,通過(guò)增加一個(gè)部分的復(fù)雜性來(lái)修復(fù)問(wèn)題通常將慢慢地增加其他部分的復(fù)雜性

    • 通過(guò)增加功能、選項(xiàng)、配置是修復(fù)問(wèn)題的最快的途徑,但是這很容易讓人忘記簡(jiǎn)潔的內(nèi)涵,卽使從長(zhǎng)遠(yuǎn)來(lái)看,簡(jiǎn)潔依然是好軟件的關(guān)鍵因素

    • 簡(jiǎn)潔的設(shè)計(jì)需要在工作開(kāi)始的時(shí)候舍棄不必要的想法,并且在軟件的生命周期內(nèi)嚴(yán)格區(qū)別好的改變或壞的改變。通過(guò)足夠的努力,一個(gè)好的改變可以在不破壞原有完整概念的前提下保持自適應(yīng)

    • 而一個(gè)壞的改變則不能達(dá)到這個(gè)效果,它們僅僅是通過(guò)膚淺的和簡(jiǎn)單的妥協(xié)來(lái)破壞原有設(shè)計(jì)的一致性。只有通過(guò)簡(jiǎn)潔的設(shè)計(jì),才能讓一個(gè)系統(tǒng)保持穩(wěn)定、安全和持續(xù)的進(jìn)化

    • 附帶了相關(guān)的工具和標(biāo)準(zhǔn)庫(kù)

    • 沒(méi)有隱式的數(shù)值轉(zhuǎn)換

    • 沒(méi)有構(gòu)造函數(shù)和析構(gòu)函數(shù)

    • 沒(méi)有運(yùn)算符重載

    • 沒(méi)有默認(rèn)參數(shù)

    • 沒(méi)有繼承

    • 沒(méi)有泛型(go2中考慮加入)

    • 沒(méi)有異常,即沒(méi)有與錯(cuò)誤處理相關(guān)的控制結(jié)構(gòu)

    • 沒(méi)有宏

    • 沒(méi)有函數(shù)修飾

    • 沒(méi)有線程局部存儲(chǔ)。

    • 沒(méi)有指針運(yùn)算

    • 沒(méi)有類(lèi)型別名

    • 數(shù)組邊界總是受到檢查


  • 基本特性

    • 自動(dòng)垃圾回收

    • 包管理

    • 函數(shù)作為一等公民

    • 系統(tǒng)調(diào)用接口

    • 只讀的UTF8字符串

    • 函數(shù)多返回值

    • 匿名函數(shù)和閉包

    • 反射

    • 靜態(tài)鏈接

    • 嚴(yán)格的依賴(lài)規(guī)范

    • CSP并發(fā)編程

    • Goroutine協(xié)程

    • 接口類(lèi)型


  • 向后兼容

    • Go語(yǔ)言本身是成熟和穩(wěn)定的,而且承諾保證向后兼容:用之前的Go語(yǔ)言編寫(xiě)程序可以用新版本的Go語(yǔ)言編譯器和標(biāo)準(zhǔn)庫(kù)直接構(gòu)建而不需要修改代碼


  • 類(lèi)型系統(tǒng)

    • 相比較于js、python,Go語(yǔ)言的類(lèi)型系統(tǒng)避免動(dòng)態(tài)語(yǔ)言中那些粗心的類(lèi)型錯(cuò)誤。但是Go語(yǔ)言的類(lèi)型系統(tǒng)相比傳統(tǒng)的強(qiáng)類(lèi)型語(yǔ)言又要簡(jiǎn)潔很多,雖然有時(shí)候這會(huì)導(dǎo)致一個(gè)“無(wú)類(lèi)型”的抽象類(lèi)型的概念

    • Go語(yǔ)言程序員并不需要像C++或Haskell程序員那樣糾結(jié)于具體類(lèi)型的安全屬性。在實(shí)踐中Go語(yǔ)言簡(jiǎn)潔的類(lèi)型系統(tǒng)給了程序員帶來(lái)了更多的安全性和更好的運(yùn)行時(shí)性能

    • Go語(yǔ)言遵循當(dāng)代計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的原則,特別是局部的重要性。Go的內(nèi)置數(shù)據(jù)類(lèi)型和大多數(shù)的標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)都經(jīng)過(guò)精心設(shè)計(jì)而避免顯式的初始化或隱式的構(gòu)造函數(shù),因此內(nèi)存分配和內(nèi)存初始化代碼被隱藏在庫(kù)代碼中了

    • Go語(yǔ)言的聚合類(lèi)型(結(jié)構(gòu)體和數(shù)組)可以直接操作它們的元素,只需要更少的存儲(chǔ)空間、更少的內(nèi)存分配,而且指針操作比其他間接操作的語(yǔ)言也更有效率


  • 并發(fā)支持

    • 由于現(xiàn)代計(jì)算機(jī)是一個(gè)并行的機(jī)器,Go語(yǔ)言提供了基于CSP的并發(fā)特性支持。Go語(yǔ)言的動(dòng)態(tài)棧使得輕量級(jí)線程goroutine的初始棧可以很小,因此創(chuàng)建一個(gè)goroutine的代價(jià)很小,創(chuàng)建百萬(wàn)級(jí)的goroutine完全是可行的。

    • Go并發(fā)的座右銘:不要通過(guò)共享內(nèi)存進(jìn)行通信,而要通過(guò)通信共享內(nèi)存(Don't communicate by sharing memory, share memory by communicating)


  • 自動(dòng)垃圾回收機(jī)制

    • 對(duì)于系統(tǒng)語(yǔ)言,垃圾回收可能是一個(gè)有爭(zhēng)議的功能

    • Go沒(méi)有顯式的內(nèi)存釋放操作:分配的內(nèi)存返回池的唯一方法是通過(guò)垃圾回收器。

    • 內(nèi)存管理對(duì)語(yǔ)言在實(shí)踐中的工作方式具有深遠(yuǎn)的影響。在C和C++中,太多的編程工作花費(fèi)在內(nèi)存分配和釋放上

    • 由于垃圾回收機(jī)制,語(yǔ)言更易于使用。

    • 垃圾回收會(huì)帶來(lái)巨大的成本:常規(guī)開(kāi)銷(xiāo),延遲和實(shí)現(xiàn)的復(fù)雜性

    • 知識(shí)淵博的程序員可以限制收集器所承受的壓力,從而提高性能。(此外,Go安裝附帶了用于研究正在運(yùn)行的程序的動(dòng)態(tài)內(nèi)存性能的良好工具)

    • 自動(dòng)垃圾回收算法是一個(gè)持續(xù)跟新的過(guò)程、活躍的開(kāi)發(fā)領(lǐng)域


  • 強(qiáng)大的標(biāo)準(zhǔn)庫(kù)與規(guī)范

    • Go語(yǔ)言的標(biāo)準(zhǔn)庫(kù),提供了清晰的構(gòu)建模塊和公共接口,包含I/O操作、文本處理、圖像、密碼學(xué)、網(wǎng)絡(luò)和分布式應(yīng)用程序等,并支持許多標(biāo)準(zhǔn)化的文件格式和編解碼協(xié)議

    • 庫(kù)和工具使用了大量的約定來(lái)減少額外的配置和解釋?zhuān)瑥亩罱K簡(jiǎn)化程序的邏輯,而且每個(gè)Go程序結(jié)構(gòu)都是如此的相似,因此Go程序也很容易學(xué)習(xí)

    • Go語(yǔ)言自帶工具構(gòu)建Go語(yǔ)言項(xiàng)目只需要使用文件名、標(biāo)識(shí)符名稱(chēng)以及少量的注釋確定所有的庫(kù)、可執(zhí)行文件、測(cè)試、基準(zhǔn)測(cè)試、案例、以及特定于平臺(tái)的變量、項(xiàng)目的文檔等;Go語(yǔ)言源代碼本身就包含了構(gòu)建規(guī)范


  • 開(kāi)源,活躍的社區(qū)

  • 組成而不是繼承

    • Go采用一種不尋常的方法來(lái)進(jìn)行面向?qū)ο蟮木幊蹋ń涌冢?,它允許有相同方法的任何類(lèi)型繼承,而不僅是類(lèi)

    • Go沒(méi)有任何形式的基于類(lèi)型的繼承,這意味著沒(méi)有類(lèi)型層次結(jié)構(gòu)

    • 這是一個(gè)故意的設(shè)計(jì)選擇,盡管類(lèi)型層次結(jié)構(gòu)已用于構(gòu)建許多成功的軟件,但Go認(rèn)為該模型已被過(guò)度使用


Go語(yǔ)言的優(yōu)勢(shì)

  • 學(xué)習(xí)曲線容易,語(yǔ)法簡(jiǎn)單清晰

    • 單就類(lèi)型和規(guī)則而言,Go 與 C99、C11 相似之處頗多,這也是Go語(yǔ)言被冠以“NextC”名號(hào)的重要原因。

    • Go語(yǔ)言的語(yǔ)法規(guī)則嚴(yán)謹(jǐn),沒(méi)有歧義,更沒(méi)什么黑魔法變異用法。

    • 任何人寫(xiě)出的代碼都基本一致,這使得Go語(yǔ)言簡(jiǎn)單易學(xué)。放棄部分“靈活”和“自由”,換來(lái)更好的維護(hù)性


  • 強(qiáng)大的標(biāo)準(zhǔn)庫(kù)和工具鏈

    • 完整的工具鏈對(duì)于日常開(kāi)發(fā)極為重要。Go 在此做得相當(dāng)不錯(cuò),無(wú)論是編譯、格式化、錯(cuò)誤檢查、幫助文檔,還是第三方包下載、更新都有對(duì)應(yīng)的工具

    • 內(nèi)置完整測(cè)試框架,其中包括單元測(cè)試、性能測(cè)試、代碼覆蓋率、數(shù)據(jù)競(jìng)爭(zhēng),以及用來(lái)調(diào)優(yōu)的 pprof,這些都是保障代碼能正確而穩(wěn)定運(yùn)行的必備利器

    • 可通過(guò)環(huán)境變量輸出運(yùn)行時(shí)監(jiān)控信息,尤其是垃圾回收和并發(fā)調(diào)度跟蹤,可進(jìn)一步幫助我們改進(jìn)算法,獲得更佳的運(yùn)行期表現(xiàn)


  • 自動(dòng)垃圾回收機(jī)制

    • 垃圾回收一直是個(gè)難題。早年間,Java 就因垃圾回收低效被嘲笑了許久,后來(lái) Sun 連續(xù)收納了好多人和技術(shù)才發(fā)展到今天??杉幢闳绱?,在 Hadoop 等大內(nèi)存應(yīng)用場(chǎng)景下,垃圾回收依舊捉襟見(jiàn)肘、步履維艱

    • 相比 Java,Go 面臨的困難要更多。因指針的存在,所以回收內(nèi)存不能做收縮處理。幸好,指針運(yùn)算被阻止,否則要做到精確回收都難

    • 每次升級(jí),垃圾回收器必然是核心組件里修改最多的部分。從并發(fā)清理,到降低 STW 時(shí)間,直到 Go 的 1.5 版本實(shí)現(xiàn)并發(fā)標(biāo)記,逐步引入三色標(biāo)記和寫(xiě)屏障等等,都是為了能讓垃圾回收在不影響用戶(hù)邏輯的情況下更好地工作


  • 靜態(tài)鏈接
    運(yùn)行時(shí)、依賴(lài)庫(kù)直接打包到可執(zhí)行文件內(nèi)部,簡(jiǎn)化了部署和發(fā)布操作,無(wú)須事先安裝運(yùn)行環(huán)境和下載諸多第三方庫(kù)

  • 編譯迅速

  • 清晰的依賴(lài)關(guān)系

  • 并發(fā)編程

    • 在早期 CPU 都是以單核的形式順序執(zhí)行機(jī)器指令。Go語(yǔ)言的祖先C語(yǔ)言正是這種順序編程語(yǔ)言的代表

    • 隨著處理器技術(shù)的發(fā)展,單核時(shí)代以提升處理器頻率來(lái)提高運(yùn)行效率的方式遇到了瓶頸,單核 CPU 發(fā)展的停滯,給多核 CPU 的發(fā)展帶來(lái)了機(jī)遇

    • 現(xiàn)代計(jì)算機(jī)都擁有多個(gè)核,但是大部分編程語(yǔ)言都沒(méi)有有效的工具讓程序可以輕易利用這些資源。編程時(shí)需要寫(xiě)大量的線程同步代碼來(lái)利用多個(gè)核,很容易導(dǎo)致錯(cuò)誤

    • Go語(yǔ)言正是在多核和網(wǎng)絡(luò)化的時(shí)代背景下誕生的原生支持并發(fā)的編程語(yǔ)言。Go語(yǔ)言從底層原生支持并發(fā),無(wú)須第三方庫(kù),開(kāi)發(fā)人員可以很輕松地在編寫(xiě)程序時(shí)決定怎么使用 CPU 資源

    • Goroutine 是 Go 最顯著的特征

    • Go語(yǔ)言的并發(fā)是基于 goroutine 的,goroutine 類(lèi)似于線程,但并非線程??梢詫?goroutine 理解為一種虛擬線程。Go語(yǔ)言運(yùn)行時(shí)會(huì)參與調(diào)度 goroutine,并將 goroutine 合理地分配到每個(gè) CPU 中,最大限度地使用 CPU 性能

    • Go用類(lèi)協(xié)程的方式來(lái)處理并發(fā)單元,卻又在運(yùn)行時(shí)層面做了更深度的優(yōu)化處理。這使得語(yǔ)法上的并發(fā)編程變得極為容易

    • 無(wú)須處理回調(diào),無(wú)須關(guān)注線程切換,僅一個(gè)關(guān)鍵字,簡(jiǎn)單而自然

    • 搭配 channel,實(shí)現(xiàn) CSP 模型。將并發(fā)單元間的數(shù)據(jù)耦合拆解開(kāi)來(lái),各司其職,這對(duì)所有糾結(jié)于內(nèi)存共享、鎖粒度的開(kāi)發(fā)人員都是一個(gè)可期盼的解脫


  • 內(nèi)存分配

    • Go 選擇了 tcmalloc,它本就是為并發(fā)而設(shè)計(jì)的高性能內(nèi)存分配組件

    • 刨去因配合垃圾回收器而修改的內(nèi)容,內(nèi)存分配器完整保留了 tcmalloc 的原始架構(gòu)。使用 cache 為當(dāng)前執(zhí)行線程提供無(wú)鎖分配,多個(gè) central 在不同線程間平衡內(nèi)存單元復(fù)用

    • heap 則管理著大塊內(nèi)存,用以切分成不同等級(jí)的復(fù)用內(nèi)存塊??焖俜峙浜投?jí)內(nèi)存平衡機(jī)制,讓內(nèi)存分配器能優(yōu)秀地完成高壓力下的內(nèi)存管理任務(wù)


Go語(yǔ)言擅長(zhǎng)的領(lǐng)域

  • Go語(yǔ)言主要用作服務(wù)器端開(kāi)發(fā),適合于多人周期較長(zhǎng)的大型軟件和支持云計(jì)算的網(wǎng)絡(luò)服務(wù)

  • 在服務(wù)器編程方面,Go語(yǔ)言適合處理日志、中間件、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理等

  • 網(wǎng)絡(luò)編程方面,Go語(yǔ)言廣泛應(yīng)用于 Web 應(yīng)用、API 應(yīng)用、下載應(yīng)用等

  • 此外,Go語(yǔ)言還可用于內(nèi)存數(shù)據(jù)庫(kù)和云平臺(tái)領(lǐng)域,目前國(guó)外很多云平臺(tái)都是采用 Go 開(kāi)發(fā)

  • 由于Go垃圾回收犧牲了一些性能,因此其不適合做操作系統(tǒng)編程以及對(duì)速度要求極致的程序,不適合直接處理數(shù)據(jù)分析與計(jì)算

使用Go語(yǔ)言的公司

參見(jiàn)世界上使用Go語(yǔ)言的企業(yè)

  • Google

    • 作為創(chuàng)造了Go語(yǔ)言的 google 公司,當(dāng)然會(huì)力挺Go語(yǔ)言了。Google 有很多基于 Go 開(kāi)發(fā)的開(kāi)源項(xiàng)目,比如 kubernets,docker,大家可以參考《哪些項(xiàng)目使用Go語(yǔ)言開(kāi)發(fā)》一節(jié)了解更多的Go語(yǔ)言開(kāi)源項(xiàng)目


  • Facebook

    • Facebook 也在使用Go語(yǔ)言,為此他們還專(zhuān)門(mén)在 Github 上建立了一個(gè)開(kāi)源組織 facebookgo。大家可以通過(guò) github.com/facebookgo 訪問(wèn)查看 facebook 開(kāi)源的項(xiàng)目,其中最具代表性的就是著名平滑重啟工具 grace


  • 騰訊

    • 騰訊在 15 年就已經(jīng)做了 Docker 萬(wàn)臺(tái)規(guī)模的實(shí)踐。因?yàn)轵v訊主要的開(kāi)發(fā)語(yǔ)言是 C/C++ ,所以在使用Go語(yǔ)言方面會(huì)方便很多,也有很多優(yōu)勢(shì),不過(guò)日積月累的 C/C++ 代碼很難改造,也不敢動(dòng),所以主要在新業(yè)務(wù)上嘗試使用 Go


  • 百度

    • 百度主要在運(yùn)維方面使用到了Go語(yǔ)言,比如百度運(yùn)維的一個(gè) BFE 項(xiàng)目,主要負(fù)責(zé)前端流量的接入,其次就是百度消息通訊系統(tǒng)的服務(wù)器端也使用到了Go語(yǔ)言


  • 七牛云

    • 七牛云算是國(guó)內(nèi)第一家選Go語(yǔ)言做服務(wù)端的公司。早在 2011 年,當(dāng)Go語(yǔ)言的語(yǔ)法還沒(méi)完全穩(wěn)定下來(lái)的情況下,七牛云就已經(jīng)選擇將 Go 作為存儲(chǔ)服務(wù)端的主體語(yǔ)言


  • 京東

    • 京東云消息推送系統(tǒng)、云存儲(chǔ),以及京東商城的列表頁(yè)等都是使用Go語(yǔ)言開(kāi)發(fā)的


  • 小米

    • 小米對(duì)Go語(yǔ)言的支持,在于運(yùn)維監(jiān)控系統(tǒng)的開(kāi)源,它的官方網(wǎng)址是 open-falcon.org/。此外,小米互娛、小米商城、小米視頻、小米生態(tài)鏈等團(tuán)隊(duì)都在使用Go語(yǔ)言


  • 360

    • 360 對(duì)Go語(yǔ)言的使用也不少,比如開(kāi)源的日志搜索系統(tǒng) Poseidon,大家可以通過(guò) github.com/Qihoo360/pos 查看,還有 360 的推送團(tuán)隊(duì)也在使用Go語(yǔ)言
      除了上面提到的,還有很多公司開(kāi)始嘗試使用Go語(yǔ)言,比如美團(tuán)、滴滴、新浪等。


Go語(yǔ)言吉祥物

Go語(yǔ)言有一個(gè)吉祥物,在會(huì)議、文檔頁(yè)面和博文中,大多會(huì)包含下圖所示的 Go Gopher,這是才華橫溢的插畫(huà)家 Renee French 設(shè)計(jì)的,她也是 Go 設(shè)計(jì)者之一 Rob Pike 的妻子。

golang基礎(chǔ)介紹

看完上述內(nèi)容,你們對(duì)golang有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI