go 語(yǔ)言學(xué)習(xí)

使用:=這個(gè)符號(hào)。使用了這個(gè)符號(hào)之后,開(kāi)發(fā)者不再需要寫(xiě)var關(guān)鍵字,只需要定義變量名,并在后面進(jìn)行賦值即可。并且,Golang編譯器會(huì)根據(jù)后面的值的類(lèi)型,自動(dòng)推導(dǎo)出變量的類(lèi)型。

go 語(yǔ)法:1, 區(qū)分大小寫(xiě)
標(biāo)識(shí)符為(下劃線(xiàn))的變量,是系統(tǒng)保留的匿名變量,在賦值后,會(huì)被立即釋放,稱(chēng)之為匿名變量。其作用是變量占位符,對(duì)其變量賦值結(jié)構(gòu)。通常會(huì)在批量賦值時(shí)使用。
例如,函數(shù)返回多個(gè)值,我們僅僅需要其中部分,則不需要的使用
來(lái)占位

在Golang的常量定義中,使用const關(guān)鍵字,并且不能使用:=標(biāo)識(shí)符。

判斷:
在Golang中,唯一的不同是不需要小括號(hào),但是大括號(hào)還是必須的
循環(huán):
和判斷語(yǔ)句一樣,在Golang中也是沒(méi)有小括號(hào)的。
此外,在循環(huán)條件中,初始化語(yǔ)句和后置語(yǔ)句是可選的,這個(gè)時(shí)候把分號(hào)去掉,for循環(huán)就變成了while循環(huán)。
函數(shù):
在Golang的函數(shù)定義中,所有的函數(shù)都以func開(kāi)頭,并且Golang命名推薦使用駝峰命名法。
注意,在Golang的函數(shù)中,如果首字母是小寫(xiě),則只能在包內(nèi)使用;如果首字母是大寫(xiě),則可以在包外被引入使用。可以理解為,使用小寫(xiě)的函數(shù),是private的,使用大寫(xiě)的函數(shù),是public的。

Golang中的函數(shù)可以返回任意多個(gè)返回值。

defer 語(yǔ)句會(huì)將函數(shù)推遲到外層函數(shù)返回之后執(zhí)行。 推遲調(diào)用的函數(shù)其參數(shù)會(huì)立即求值,但直到外層函數(shù)返回前該函數(shù)都不會(huì)被調(diào)用。

指針:
在Golang中,指針的用法和 C 是一樣的。同樣是用&取地址,用*取地址中的值。

數(shù)組:
var a [10]int
注意,在Golang中,數(shù)組的大小也同樣和 C 語(yǔ)言一樣不能改變

切片:
數(shù)組的切片,顧名思義,就是將一個(gè)數(shù)組按需切出自己所需的部分。
每個(gè)數(shù)組的大小都是固定的。而切片則為數(shù)組元素提供動(dòng)態(tài)大小的、靈活的視角。在實(shí)踐中,切片比數(shù)組更常用。
這是因?yàn)?,Golang中的切片,不是拷貝,而是定義了新的指針,指向了原來(lái)數(shù)組所在的內(nèi)存空間。所以,修改了切片數(shù)組的值,也就相應(yīng)的修改了原數(shù)組的值了。
此外,切片可以用append增加元素。但是,如果此時(shí)底層數(shù)組容量不夠,此時(shí)切片將會(huì)指向一個(gè)重新分配空間后進(jìn)行拷貝的數(shù)組。

因此可以得出結(jié)論:
切片并不存儲(chǔ)任何數(shù)據(jù),它只是描述了底層數(shù)組中的一段。
更改切片的元素會(huì)修改其底層數(shù)組中對(duì)應(yīng)的元素。
與它共享底層數(shù)組的切片都會(huì)觀測(cè)到這些修改。

make:
切片可以用內(nèi)建函數(shù) make 來(lái)創(chuàng)建,這也是你創(chuàng)建動(dòng)態(tài)數(shù)組的方式。
make 函數(shù)會(huì)分配一個(gè)元素為零值的數(shù)組并返回一個(gè)引用了它的切片:

結(jié)構(gòu)體:
而在Golang中,則沒(méi)有對(duì)象這一說(shuō)法,因?yàn)镚olang是一個(gè)面向過(guò)程的語(yǔ)言。但是,我們又知道面向?qū)ο笤陂_(kāi)發(fā)中的便捷性,所以我們?cè)贕olang中有了結(jié)構(gòu)體這一類(lèi)型。
方法:
也就是說(shuō),只有指針接收者類(lèi)型的方法,才能修改這個(gè)接收器的成員值,非指針接收者,方法修改的只是這個(gè)傳入的指針接收者的一個(gè)拷貝
接口:
這一部分和結(jié)構(gòu)體的定義很相似,但是里面的元素?fù)Q成了函數(shù),但是這個(gè)函數(shù)不需要func關(guān)鍵字。這里和Java中的接口相似,不需要訪(fǎng)問(wèn)修飾符,只需要函數(shù)名參數(shù)返回類(lèi)型。
定義完接口之后,我們需要定義方法去實(shí)現(xiàn)這些接口。注意,這里新定義方法的方法名,參數(shù),返回類(lèi)型,必須和接口中所定義的完全一致。

線(xiàn)程與協(xié)程:
簡(jiǎn)單來(lái)說(shuō),進(jìn)程和線(xiàn)程是由操作系統(tǒng)進(jìn)行調(diào)度的,協(xié)程是對(duì)內(nèi)核透明,由程序自己調(diào)度的。不僅如此,Golang的協(xié)程所占用的內(nèi)存空間極小,也就是說(shuō),協(xié)程更加的輕量。此外,協(xié)程的切換一般由程序員在代碼中顯式控制,而不是交給操作系統(tǒng)去調(diào)度。它避免了上下文切換時(shí)的額外耗費(fèi),兼顧了多線(xiàn)程的優(yōu)點(diǎn),簡(jiǎn)化了高并發(fā)程序的復(fù)雜。
至于別的,本文不進(jìn)行深入的研究,本文的基調(diào)還是以入門(mén)為主,即怎么去用。

goroutine:
簡(jiǎn)單來(lái)說(shuō),我們所編寫(xiě)的Golang源代碼全部都跑在goroutine中。
我們只需要使用go關(guān)鍵字,就可以啟動(dòng)一個(gè)goroutine。

select:
select關(guān)鍵字用在有多個(gè)信道的情況下。
他的目的是為了提高系統(tǒng)的效率,而不至于在某一個(gè)信道阻塞的情況下,不知道該干什么。
select中會(huì)有case代碼塊,用于發(fā)送或接收數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • hello World 應(yīng)用程序入口[注意] 必須是main包:package main 必須是main方法:fu...
    茶還是咖啡閱讀 469評(píng)論 0 2
  • 一、認(rèn)識(shí)反射 維基百科中的定義:在計(jì)算機(jī)科學(xué)中,反射是指計(jì)算機(jī)程序在運(yùn)行時(shí)(Run time)可以訪(fǎng)問(wèn)、檢測(cè)和修改...
    Every_dawn閱讀 1,801評(píng)論 0 0
  • 基礎(chǔ) go的學(xué)習(xí),感謝Go By Example、go網(wǎng)絡(luò)編程與go語(yǔ)言標(biāo)準(zhǔn)庫(kù)隨著學(xué)習(xí)的深入,此文章持續(xù)更新......
    blossom_綻放閱讀 584評(píng)論 0 1
  • 1.go版本的hello world 和C語(yǔ)言相似,go語(yǔ)言的基本組成有:*包聲明,編寫(xiě)源文件時(shí),必須在非注釋的第...
    孤寡老人sos閱讀 478評(píng)論 0 0
  • Go 語(yǔ)言的基礎(chǔ)組成有以下幾個(gè)部分:包聲明 引入包 函數(shù) 變量 語(yǔ)句 & 表達(dá)式 注釋 當(dāng)標(biāo)識(shí)符(包括常量、變量、...
    安然在路上閱讀 319評(píng)論 0 0

友情鏈接更多精彩內(nèi)容