go語言中,用var關鍵字建立乙個具體型別的變數,並設定它的初始值。通用形式為: var name type = expression
型別和表示式部分可以省略其中乙個,但不能都省略。如果省略型別,變數的型別將由初始化表示式決定;如果表示式省略,其初始值對應於型別的零值——對於數字是0,對於布林值是false,對於字串是"",對於介面和引用型別(slice、指標、map、通道、函式等)是nil。對於陣列或結構體這樣的復合型別,零值是其所有元素或成員的零值。
go語言的零值機制確保所有的變數是良好定義的,不存在未初始化的變數。
var s string //s為""
var i, j int //i j的型別分別為int, int
var i, s = 1, "hello world" //i為int,s為string
短變數宣告符 := 可以用來宣告和初始化區域性變數(非跨包),其格式為:name := expression,name的型別由expression決定。
i := 100
x, y := 0, 1
段變數宣告短小、靈活,因而在區域性變數的宣告和初始化中主要使用段變數宣告,var宣告通常是為那些跟初始化表示式型別不一致的區域性變數保留的,或者用於後面才對變數賦值以及變數初始值不重要的情況。
短變數宣告不需要宣告所有在左邊的變數。如果一些變數在同乙個詞法塊中宣告,那麼對於這些變數,短變數宣告的行為等同於賦值。但短變數宣告最少需要宣告乙個新變數,否則**編譯將無法通過。
包級別變數的生命週期是整個程式的執行時間,區域性變數有乙個動態的生命週期:每次執行宣告語句時建立乙個新的例項,變數一直生存到它變得不可訪問,這時它占用的儲存空間被**。
編譯器可以選擇使用堆或棧來分配空間,但與c/c++不同的是,這個選擇不是基於使用var或new關鍵字來宣告變數,而是變數的可達性。如下:
var global *int
func f()
func g()
上述**中,x使用堆空間,因為它在f函式返回後還可以從global變數訪問,儘管它被宣告為乙個區域性變數。相反y儘管通過new函式建立,但當g函式返回時它變得不可達,因此可以在棧中為y分配空間。
type關鍵字定義乙個新的命名型別,它和某個已有型別使用同樣的底層型別。其格式為:type name underlying-type,型別宣告通常出現在包級別。
本文部分內容摘自《go程式語言》
Go語言的特性
目前有2個版本的編譯器 go原生編譯器gc和非原生編譯器gccgo編譯器,其中,gc 版本的編譯器已經被移植到 windows 平台上,並整合在主要發行版中,你也可以通過安裝 mingw 從而在 windows 平台下使用 gcc 編譯器。這兩個編譯器都是以單通道的形式工作。編譯器gc編譯速度很快,...
五 go語言特性 go語言筆記
defer 呼叫乙個被 defer 的函式時在函式剛要返回之前延遲執行,當函式無論怎樣返回,某資源必須釋放時,可用這種與眾不同 但有效的處理方式。傳統的例子包括解鎖互斥或關閉檔案。package main import log func main mydefer func mydefer func ...
Go語言的函式特性
go語言的每乙個函式宣告都包含乙個函式名 乙個形參列表 乙個可選的返回列表以及函式體 func name parameter list result list 上述函式宣告的語法通式中,若函式僅有乙個或沒有返回值,返回列表的圓括號可以省略。函式的型別稱作函式簽名。當兩個函式擁有相同的形參列表和返回列...