2021-10-22

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、達(dá)州托管服務(wù)器、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、域名注冊(cè)等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:028-86922220
每一個(gè)變量(常量、類型或函數(shù))在程序中都有一定的作用范圍。稱之為作用域。
Go語言在編譯時(shí)會(huì)檢查每一個(gè)變量是否使用過,未使用過的變量就會(huì)編譯錯(cuò)誤。
根據(jù)變量定義位置的不同,可以分為以下三個(gè)類型:
在函數(shù)體內(nèi)被聲明的變量稱之為局部變量,作用在函數(shù)體內(nèi),函數(shù)的參數(shù)和返回值變量都屬于局部變量。局部變量不會(huì)一直存在,在函數(shù)被調(diào)用時(shí)存在,函數(shù)調(diào)用結(jié)束后變量就會(huì)被銷毀,即生命周期。
例子:其中a、b均為局部變量,只會(huì)在main函數(shù)內(nèi)有效
在函數(shù)體外被聲明的變量稱之為全局變量,作用于所有源文件。不包含這個(gè)全局變量的源文件需要使用"import"關(guān)鍵字引入全局變量所在的源文件之后才能使用這個(gè)全局變量。
全局變量聲明必須以 var 關(guān)鍵字開頭,如果想要在外部包中使用全局變量的首字母必須大寫。
例如:global為全局在main2和main函數(shù)中都能使用
函數(shù)名后面的小括號(hào)里定義的變量, 用于接受來自調(diào)用函數(shù)的參數(shù)。用于接收調(diào)用該函數(shù)時(shí)傳入的參數(shù)。
例如:下面的例子中,第十七行a、b為sum函數(shù)定義的形參,用于傳入main函數(shù)中的AF、BF
首先從網(wǎng)上下載go語言的編譯器,我在發(fā)布這篇經(jīng)驗(yàn)的時(shí)候go語言編譯器的版本已經(jīng)更新到了1.4版。根據(jù)你的系統(tǒng)平臺(tái)下載相應(yīng)的版本后,如果是壓縮文件,先解壓后雙擊運(yùn)行,不是壓縮文件,直接雙擊運(yùn)行就可以了,運(yùn)行后出現(xiàn)下面的界面,在下面界面上單擊“Next”。
跟所有的軟件安裝包一樣,go語言編譯安裝是也需要接受許可協(xié)議,在圖中紅圈的位置單擊選擇框,同意許可協(xié)議,單擊“Next”。
在這一步你要改變go的安裝目錄,默認(rèn)是安裝在C盤下,C盤下文件文件太多會(huì)影響系統(tǒng)性能,單擊紅圈所示的“change”按鈕會(huì)彈出安裝目錄選擇對(duì)話框。
在這個(gè)對(duì)話框中你選擇你要安裝go編譯器的目錄,選擇后會(huì)在紅圈所示的位置會(huì)顯示你所選擇的目錄,如果不是你預(yù)期的目錄,青重新選擇,然后單擊“OK”按鈕,對(duì)話框會(huì)回到第三步的對(duì)話框,但是目錄以及變成了你剛才選擇的目錄,這個(gè)對(duì)話框中單擊“Next”按鈕。
這一步開始安裝go編譯器了,單擊“Install”按鈕,系統(tǒng)會(huì)自動(dòng)安裝go編譯器到你剛才選擇的目錄中。
如果不出意外,安裝程序開始copy文件,并以進(jìn)度條的方式顯示當(dāng)前的角度,一般5分鐘左右就安裝完了。
黨出現(xiàn)下面的界面的時(shí)候,表明go編譯器已經(jīng)安裝完成了。單擊“Finish”按鈕結(jié)束安裝。
安裝完后要配置一些環(huán)境變量,首先要把go安裝目錄下的bin目錄放到Path環(huán)境變量中。
接著創(chuàng)建一個(gè)GOPATH環(huán)境變量,這個(gè)變量很重要,我自己寫的代碼要放到這個(gè)變量中配置的目錄中,go編譯器才會(huì)找到并編譯
繼續(xù)在創(chuàng)建一個(gè)GOROOT變量,配合go編譯器安裝的目錄。
完成步驟后,打開命令行g(shù)o verison 回車,如果配置沒有錯(cuò)會(huì)出現(xiàn)go編譯器的版本信息,如下圖中紅圈所示。
局部變量
在函數(shù)體內(nèi)聲明的變量稱之為局部變量,它們的作用域只在函數(shù)體內(nèi),參數(shù)和返回值變量也是局部變量。
以下實(shí)例中 main() 函數(shù)使用了局部變量 a, b, c:
package main
import "fmt"
func main() {
/* 聲明局部變量 */
var a, b, c int
/* 初始化參數(shù) */
a = 10
b = 20
c = a + b
fmt.Printf ("結(jié)果: a = %d, b = %d and c = %d\n", a, b, c)
}
以上實(shí)例執(zhí)行輸出結(jié)果為:
結(jié)果: a = 10, b = 20 and c = 30
全局變量
在函數(shù)體外聲明的變量稱之為全局變量,全局變量可以在整個(gè)包甚至外部包(被導(dǎo)出后)使用。
全局變量可以在任何函數(shù)中使用,以下實(shí)例演示了如何使用全局變量:
package main
import "fmt"
/* 聲明全局變量 */
var g int
func main() {
/* 聲明局部變量 */
var a, b int
/* 初始化參數(shù) */
a = 10
b = 20
g = a + b
fmt.Printf("結(jié)果: a = %d, b = %d and g = %d\n", a, b, g)
}
以上實(shí)例執(zhí)行輸出結(jié)果為:
結(jié)果: a = 10, b = 20 and g = 30
Go 語言程序中全局變量與局部變量名稱可以相同,但是函數(shù)內(nèi)的局部變量會(huì)被優(yōu)先考慮。實(shí)例如下:
package main
import "fmt"
/* 聲明全局變量 */
var g int = 20
func main() {
/* 聲明局部變量 */
var g int = 10
fmt.Printf ("結(jié)果: g = %d\n", g)
}
以上實(shí)例執(zhí)行輸出結(jié)果為:
結(jié)果: g = 10
類型 在變量名后邊
也可不顯式聲明類型, 類型推斷, 但是是靜態(tài)語言, name一開始放字符串就不能再賦值數(shù)字
方法,屬性 分開 方法名首字母大寫就是就是外部可調(diào)的
面向?qū)ο笤O(shè)計(jì)的一個(gè)重要原則:“優(yōu)先使用組合而不是繼承”
Dog 也是Animal , 要復(fù)用Animal 的屬性和方法,
只需要在結(jié)構(gòu)體 type 里面寫 Animal
入口也是main, 用用試試
多態(tài), 有這個(gè)方法就是這個(gè)接口的實(shí)現(xiàn), 具體的類 不需要知道自己實(shí)現(xiàn)了什么接口,
使用: 在一個(gè)函數(shù)調(diào)用之前加上關(guān)鍵字go 就啟動(dòng)了一個(gè)goroutine
創(chuàng)建一個(gè)goroutine,它會(huì)被加入到一個(gè)全局的運(yùn)行隊(duì)列當(dāng)中,
調(diào)度器 會(huì)把他們分配給某個(gè) 邏輯處理器 的隊(duì)列,
一個(gè)邏輯處理器 綁定到一個(gè) 操作系統(tǒng)線程 ,在上面運(yùn)行g(shù)oroutine,
如果goroutine需要讀寫文件, 阻塞 ,就脫離邏輯處理器 直接 goroutine - 系統(tǒng)線程 綁定
編譯成同名.exe 來執(zhí)行, 不通過虛擬機(jī), 直接是機(jī)器碼, 和C 一樣, 所以非常快
但是也有自動(dòng)垃圾回收,每個(gè)exe文件當(dāng)中已經(jīng)包含了一個(gè)類似于虛擬機(jī)的runtime,進(jìn)行g(shù)oroutine的調(diào)度
默認(rèn)是靜態(tài)鏈接的,那個(gè)exe會(huì)把運(yùn)行時(shí)所需要的所有東西都加進(jìn)去,這樣就可以把exe復(fù)制到任何地方去運(yùn)行了, 因此 生成的 .exe 文件非常大
Go 語言和 C 語言的一個(gè)很大的區(qū)別是, Go 語言只靜態(tài)編譯,做個(gè)測(cè)試:
一方面是 Go 語言編譯后的可執(zhí)行文件大小比 C 語言的大很多,
另一方面是 C 語言的可執(zhí)行文件需要依賴 glibc 動(dòng)態(tài)庫(kù),
用 ldd 命令可以看出來:
或者直接刪除 glibc 動(dòng)態(tài)庫(kù), C 可執(zhí)行程序報(bào)錯(cuò),而 Go 的還能運(yùn)行:
這時(shí)候只有內(nèi)部命令可以運(yùn)行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運(yùn)行了:
設(shè)置好 LD_PRELOAD 環(huán)境變量之后, ln 命令可以運(yùn)行,但是 sudo 仍然不能運(yùn)行
只能靠 root 用戶來重新創(chuàng)建軟連接了:
所以用 sudo 來 rm 文件要小心,還是用 root 比較好。如果沒有預(yù)先留一個(gè)打開的 root 終端,登錄都登不進(jìn)去。
網(wǎng)站標(biāo)題:go語言靜態(tài)成員變量 golang靜態(tài)變量
標(biāo)題URL:http://www.kartarina.com/article32/hhodpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、建站公司、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、搜索引擎優(yōu)化、軟件開發(fā)
聲明:本網(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)