之所以會寫這篇文章,是因?yàn)樵谧詫W(xué) Go 語言的過程,總會有些困惑和迷茫,總希望更好地學(xué)習(xí)下去,因此有了一些想法,在這里梳理一下,以便日后回過頭來也可以看看此時(shí)此刻的想法。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括察布查爾錫伯網(wǎng)站建設(shè)、察布查爾錫伯網(wǎng)站制作、察布查爾錫伯網(wǎng)頁制作以及察布查爾錫伯網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,察布查爾錫伯網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到察布查爾錫伯省份的部分城市,未來相信會繼續(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 語言更是對 C 語言最徹底的一次揚(yáng)棄,它舍棄了 C 語言中靈活但是危險(xiǎn)的指針運(yùn)算,還重新設(shè)計(jì)了 C 語言中部分不太合理運(yùn)算符的優(yōu)先級,并在很多細(xì)微的地方都做了必要的打磨和改變。
Go 語言其實(shí)是 Golanguage 的簡稱,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 語言的泛型概念,這種泛型概念就是模板
3、o 引用類型
切片、map(字典)、channel(管道),接口,指針 這五種在 go 中是引用類型,其余類型為值類型。引用類型的引用存在內(nèi)存棧中,值存在堆內(nèi)存中。go 垃圾回收器 GC 回收的是堆內(nèi)存中沒有引用的空間。也就是說引用類型若要回收時(shí)只需要將引用指向 nil 即可。
在變量傳遞(函數(shù)傳參)時(shí),值類型數(shù)據(jù)是拷貝專遞。引用類型是地址傳遞,在函數(shù)傳參時(shí),如果是值傳遞,修改被傳遞的參數(shù)不會影響原有變量,如果是引用傳遞,函數(shù)內(nèi)部修改會影響外界。
4、切片和數(shù)組的顯著區(qū)別
切片是一個(gè)引用類型,數(shù)組是一個(gè)值類型。數(shù)組一旦創(chuàng)建大小是固定的。切片底層也是數(shù)據(jù),切片在運(yùn)行時(shí)可以動態(tài)增加大小。切片是可以動態(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é)束后,才會向下執(zhí)行。
? waitGroup.add(5) //設(shè)置執(zhí)行的協(xié)程數(shù)
? waitGroup.Done()//一個(gè)協(xié)程執(zhí)行完成后減一的動作
? waitGroup.wait()//等待協(xié)程等待
? 另一種辦法:給一個(gè)共用參數(shù)(切片)等待攜程看這個(gè)共用參數(shù)信號確定是否執(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è)線程下可能會有很多個(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)識符 關(guān)鍵字 變量 常量
標(biāo)識符
標(biāo)識符是指 Go 語言對各種變量、方法、函數(shù)等命名時(shí)使用的字符序列,標(biāo)識符由若干個(gè)字母、下劃線_、和數(shù)字組成,且第一個(gè)字符必須是字母。通俗的講就是凡可以自己定義的名稱都可以叫做標(biāo)識符。
下劃線_是一個(gè)特殊的標(biāo)識符,稱為空白標(biāo)識符,它可以像其他標(biāo)識符那樣用于變量的聲明或賦值(任何類型都可以賦值給它),但任何賦給這個(gè)標(biāo)識符的值都將被拋棄,因此這些值不能在后續(xù)的代碼中使用,也不可以使用_作為變量對其它變量進(jìn)行賦值或運(yùn)算。
在使用標(biāo)識符之前必須進(jìn)行聲明,聲明一個(gè)標(biāo)識符就是將這個(gè)標(biāo)識符與常量、類型、變量、函數(shù)或者代碼包綁定在一起。在同一個(gè)代碼塊內(nèi)標(biāo)識符的名稱不能重復(fù)。
標(biāo)識符的命名需要遵守以下規(guī)則:
a. 由 26 個(gè)英文字母、0~9、_組成;
b. 不能以數(shù)字開頭,例如 var 1num int 是錯誤的;
c. Go 語言中嚴(yán)格區(qū)分大小寫;
d. 標(biāo)識符不能包含空格;
d. 不能以系統(tǒng)保留關(guān)鍵字作為標(biāo)識符,比如 break,if 等等。
命名標(biāo)識符時(shí)還需要注意以下幾點(diǎn):
a. 標(biāo)識符的命名要盡量采取簡短且有意義;
b. 不能和標(biāo)準(zhǔn)庫中的包名重復(fù);
c. 為變量、函數(shù)、常量命名時(shí)采用駝峰命名法,例如 stuName、getVal;
當(dāng)然 Go 語言中的變量、函數(shù)、常量名稱的首字母也可以大寫,如果首字母大寫,則表示它可以被其它的包訪問(類似于 Java 中的 public);如果首字母小寫,則表示它只能在本包中使用 (類似于 Java 中 private)。
在 Go 語言中還存在著一些特殊的標(biāo)識符,叫做預(yù)定義標(biāo)識符,如下表所示:
預(yù)定義標(biāo)識符一共有 36 個(gè),主要包含 Go 語言中的基礎(chǔ)數(shù)據(jù)類型和內(nèi)置函數(shù),這些預(yù)定義標(biāo)識符也不可以當(dāng)做標(biāo)識符來使用。
關(guān)鍵字
關(guān)鍵字是 Go 語?預(yù)先定義好的,有特殊含義的標(biāo)識符。共 25 個(gè)。
四、認(rèn)證體系
CKA: Kubernetes 管理員認(rèn)證(CKA)旨在確保認(rèn)證持有者具備履行 Kubernetes 管理員職責(zé)的技能,知識和能力。CKA 認(rèn)證可幫助經(jīng)過認(rèn)證的管理員在就業(yè)市場中快速建立自己的信譽(yù)和價(jià)值,并能幫助公司更快地雇用高質(zhì)量的團(tuán)隊(duì)來支持他們的發(fā)展
如果企業(yè)想要申請 KCSP,條件之一是:至少需要三名員工擁有 CKA 認(rèn)證
CKAD: Kubernetes 應(yīng)用程序開發(fā)人員認(rèn)證(CKAD)旨在確保 CKAD 具備履行 Kubernetes 應(yīng)用程序開發(fā)人員職責(zé)的技能,知識和能力。 經(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í)分享,請勿用于商業(yè)目的。需要獲取的話點(diǎn)擊領(lǐng)取就可以了
資料包https://docs.qq.com/doc/DZFR4THdNS1lieXRI?&u=51169acf38a94deebd6f04d8f678a917
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標(biāo)題:為什么我們要學(xué)go語言?go語言的優(yōu)勢-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://m.rwnh.cn/article18/cesddp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容