使用:=這個(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ù)。