為什么我們要學(xué)go語言?go語言的優(yōu)勢(shì)-創(chuàng)新互聯(lián)

之所以會(huì)寫這篇文章,是因?yàn)樵谧詫W(xué) Go 語言的過程,總會(huì)有些困惑和迷茫,總希望更好地學(xué)習(xí)下去,因此有了一些想法,在這里梳理一下,以便日后回過頭來也可以看看此時(shí)此刻的想法。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括察布查爾錫伯網(wǎng)站建設(shè)、察布查爾錫伯網(wǎng)站制作、察布查爾錫伯網(wǎng)頁制作以及察布查爾錫伯網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,察布查爾錫伯網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到察布查爾錫伯省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一.?Go 語言的出現(xiàn)

在具體學(xué)習(xí) go 語言的基礎(chǔ)語法之前,我們來了解一下 go 語言出現(xiàn)的時(shí)機(jī)及其特點(diǎn)。

Go 語言最初由 Google 公司的 Robert Griesemer、Ken Thompson 和 Rob Pike 三個(gè)大牛于 2007 年開始設(shè)計(jì)發(fā)明,他們最終的目標(biāo)是設(shè)計(jì)一種適應(yīng)網(wǎng)絡(luò)和多核時(shí)代的 C 語言。所以 Go 語言很多時(shí)候被描述為“類 C 語言”,或者是“21 世紀(jì)的 C 語言”,當(dāng)然從各種角度看,Go 語言確實(shí)是從 C 語言繼承了相似的表達(dá)式語法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等諸多編程思想。但是 Go 語言更是對(duì) C 語言最徹底的一次揚(yáng)棄,它舍棄了 C 語言中靈活但是危險(xiǎn)的指針運(yùn)算,還重新設(shè)計(jì)了 C 語言中部分不太合理運(yùn)算符的優(yōu)先級(jí),并在很多細(xì)微的地方都做了必要的打磨和改變。

Go 語言其實(shí)是 Golanguage 的簡(jiǎn)稱,Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強(qiáng)類型、編譯并發(fā)型語言。Go 語言語法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。該語言的吉祥物為金花鼠(gordon),如下圖所示。

二、G 語言的理論學(xué)習(xí)

1、go 接口

所有接口的父接口是一個(gè)空類,interface{}替代任意類型

2、go 泛型

go1.7 之前的 go 泛型實(shí)現(xiàn)是使用 interface{}替代任意類型,需要使用 swich 做類型斷言判斷。1.7 之后引入了類似 java 語言的泛型概念,這種泛型概念就是模板,在程序運(yùn)行時(shí)需要 copy 一份模板生成對(duì)應(yīng)類型的方法并寫入內(nèi)存中,故泛型系統(tǒng)程序運(yùn)行時(shí)復(fù)雜性提升。

3、o 引用類型

切片、map(字典)、channel(管道),接口,指針 這五種在 go 中是引用類型,其余類型為值類型。引用類型的引用存在內(nèi)存棧中,值存在堆內(nèi)存中。go 垃圾回收器 GC 回收的是堆內(nèi)存中沒有引用的空間。也就是說引用類型若要回收時(shí)只需要將引用指向 nil 即可。

在變量傳遞(函數(shù)傳參)時(shí),值類型數(shù)據(jù)是拷貝專遞。引用類型是地址傳遞,在函數(shù)傳參時(shí),如果是值傳遞,修改被傳遞的參數(shù)不會(huì)影響原有變量,如果是引用傳遞,函數(shù)內(nèi)部修改會(huì)影響外界。

4、切片和數(shù)組的顯著區(qū)別

切片是一個(gè)引用類型,數(shù)組是一個(gè)值類型。數(shù)組一旦創(chuàng)建大小是固定的。切片底層也是數(shù)據(jù),切片在運(yùn)行時(shí)可以動(dòng)態(tài)增加大小。切片是可以動(dòng)態(tài)雙倍擴(kuò)容的,使用的是數(shù)組內(nèi)置的添加,復(fù)制功能。

切片的方法

len() 返回切片中元素的個(gè)數(shù)

cap() 返回切片的容量

5、go 語言中的列表和字典

列表:list.List ; 聲明:var name list.List? ? or? ? ?name := list.List。列表的底層數(shù)據(jù)結(jié)構(gòu)是雙向鏈表。

字典:map,提供映射關(guān)系的容器,其內(nèi)部是通過散列表實(shí)現(xiàn)的

6、go select

select 可以隨機(jī)選擇一條 channel 沒有讀寫阻塞的 case 執(zhí)行。實(shí)際上就是找到?jīng)]有阻塞的 channel。

7、一個(gè)協(xié)程如何等其余協(xié)程執(zhí)行完成之后再執(zhí)行

? 等待組:sync.WaitGroup。在等待預(yù)設(shè)數(shù)量的協(xié)程都執(zhí)行并且結(jié)束后,才會(huì)向下執(zhí)行。

? waitGroup.add(5) //設(shè)置執(zhí)行的協(xié)程數(shù)

? waitGroup.Done()//一個(gè)協(xié)程執(zhí)行完成后減一的動(dòng)作

? waitGroup.wait()//等待協(xié)程等待

? 另一種辦法:給一個(gè)共用參數(shù)(切片)等待攜程看這個(gè)共用參數(shù)信號(hào)確定是否執(zhí)行

8、死鎖

死鎖:主協(xié)程被阻塞

避免方式:

不能單個(gè)協(xié)程自讀自寫一個(gè)沒有緩沖能力的 channel

A 協(xié)程要求 B 協(xié)程先寫入自己在讀出,B 協(xié)程要求 A 協(xié)程先讀出自己再寫入。此時(shí) AB 死鎖

在 range channel 時(shí),要注意 channel 的寫入關(guān)閉,如果不關(guān)閉管道,range channel 就永遠(yuǎn)阻塞

9、go 的 channel 有緩沖和沒緩沖的區(qū)別

有緩沖的管道:即使沒有寫入,也能讀出若干默認(rèn)值。即使沒有讀出,也能寫入若干值。

無緩沖的管道:只要沒有協(xié)程寫入就讀出阻塞。沒有協(xié)程讀出,就寫入阻塞。

10、go 為啥可以高并發(fā)

G-M-P 模型

當(dāng)一個(gè)線程運(yùn)行在某一個(gè) cpu 的核上,這個(gè)線程下可能會(huì)有很多個(gè)協(xié)程(微協(xié)程),當(dāng)前有其中一個(gè)協(xié)程處于運(yùn)行狀態(tài),其余的在協(xié)程隊(duì)列中排隊(duì)等待。

實(shí)際 M(物理線程)之間的調(diào)度是在操作系統(tǒng)上完成的,效率低下。go 則是一個(gè) M(物理態(tài)線程)下掛有一個(gè)邏輯態(tài)的協(xié)程隊(duì)列,其調(diào)度是邏輯調(diào)度,不在操作系統(tǒng)層面調(diào)度。則效率高。

三、GO 語言的技能學(xué)習(xí)

GO 標(biāo)識(shí)符 關(guān)鍵字 變量 常量

標(biāo)識(shí)符

標(biāo)識(shí)符是指 Go 語言對(duì)各種變量、方法、函數(shù)等命名時(shí)使用的字符序列,標(biāo)識(shí)符由若干個(gè)字母、下劃線_、和數(shù)字組成,且第一個(gè)字符必須是字母。通俗的講就是凡可以自己定義的名稱都可以叫做標(biāo)識(shí)符。

下劃線_是一個(gè)特殊的標(biāo)識(shí)符,稱為空白標(biāo)識(shí)符,它可以像其他標(biāo)識(shí)符那樣用于變量的聲明或賦值(任何類型都可以賦值給它),但任何賦給這個(gè)標(biāo)識(shí)符的值都將被拋棄,因此這些值不能在后續(xù)的代碼中使用,也不可以使用_作為變量對(duì)其它變量進(jìn)行賦值或運(yùn)算。

在使用標(biāo)識(shí)符之前必須進(jìn)行聲明,聲明一個(gè)標(biāo)識(shí)符就是將這個(gè)標(biāo)識(shí)符與常量、類型、變量、函數(shù)或者代碼包綁定在一起。在同一個(gè)代碼塊內(nèi)標(biāo)識(shí)符的名稱不能重復(fù)。

標(biāo)識(shí)符的命名需要遵守以下規(guī)則:

a. 由 26 個(gè)英文字母、0~9、_組成;

b. 不能以數(shù)字開頭,例如 var 1num int 是錯(cuò)誤的;

c. Go 語言中嚴(yán)格區(qū)分大小寫;

d. 標(biāo)識(shí)符不能包含空格;

d. 不能以系統(tǒng)保留關(guān)鍵字作為標(biāo)識(shí)符,比如 break,if 等等。

命名標(biāo)識(shí)符時(shí)還需要注意以下幾點(diǎn):

a. 標(biāo)識(shí)符的命名要盡量采取簡(jiǎn)短且有意義;

b. 不能和標(biāo)準(zhǔn)庫(kù)中的包名重復(fù);

c. 為變量、函數(shù)、常量命名時(shí)采用駝峰命名法,例如 stuName、getVal;

當(dāng)然 Go 語言中的變量、函數(shù)、常量名稱的首字母也可以大寫,如果首字母大寫,則表示它可以被其它的包訪問(類似于 Java 中的 public);如果首字母小寫,則表示它只能在本包中使用 (類似于 Java 中 private)。

在 Go 語言中還存在著一些特殊的標(biāo)識(shí)符,叫做預(yù)定義標(biāo)識(shí)符,如下表所示:

預(yù)定義標(biāo)識(shí)符一共有 36 個(gè),主要包含 Go 語言中的基礎(chǔ)數(shù)據(jù)類型和內(nèi)置函數(shù),這些預(yù)定義標(biāo)識(shí)符也不可以當(dāng)做標(biāo)識(shí)符來使用。

關(guān)鍵字

關(guān)鍵字是 Go 語?預(yù)先定義好的,有特殊含義的標(biāo)識(shí)符。共 25 個(gè)。

四、認(rèn)證體系

CKA: Kubernetes 管理員認(rèn)證(CKA)旨在確保認(rèn)證持有者具備履行 Kubernetes 管理員職責(zé)的技能,知識(shí)和能力。CKA 認(rèn)證可幫助經(jīng)過認(rèn)證的管理員在就業(yè)市場(chǎng)中快速建立自己的信譽(yù)和價(jià)值,并能幫助公司更快地雇用高質(zhì)量的團(tuán)隊(duì)來支持他們的發(fā)展

如果企業(yè)想要申請(qǐng) KCSP,條件之一是:至少需要三名員工擁有 CKA 認(rèn)證

CKAD: Kubernetes 應(yīng)用程序開發(fā)人員認(rèn)證(CKAD)旨在確保 CKAD 具備履行 Kubernetes 應(yīng)用程序開發(fā)人員職責(zé)的技能,知識(shí)和能力。 經(jīng)過認(rèn)證的 Kubernetes Application Developer 可以定義應(yīng)用程序資源并使用核心原語來構(gòu)建,監(jiān)視和排除 Kubernetes 中可伸縮應(yīng)用程序和工具的故障

全套視頻教程+筆記

配套技術(shù)文檔

大廠面試題匯總

實(shí)戰(zhàn)項(xiàng)目

最后把我整理的關(guān)于 go 的電子書在這里分享給大家,這些資料用于學(xué)習(xí)分享,請(qǐng)勿用于商業(yè)目的。需要獲取的話點(diǎn)擊領(lǐng)取就可以了

資料包icon-default.png?t=M85Bhttps://docs.qq.com/doc/DZFR4THdNS1lieXRI?&u=51169acf38a94deebd6f04d8f678a917

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁標(biāo)題:為什么我們要學(xué)go語言?go語言的優(yōu)勢(shì)-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://bm7419.com/article18/cesddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)