go語言的每乙個函式宣告都包含乙個函式名、乙個形參列表、乙個可選的返回列表以及函式體:func name(parameter-list) (result-list)
上述函式宣告的語法通式中,若函式僅有乙個或沒有返回值,返回列表的圓括號可以省略。
函式的型別稱作函式簽名。當兩個函式擁有相同的形參列表和返回列表時(形參和返回值的名字不作為判斷依據),這兩個函式的型別或簽名是相同的。c++中的函式傳參可以使用值傳遞或引用傳遞,而go中只有值傳遞(雖然go也有引用概念,但與c++並不相同)。
有些函式的宣告沒有函式體,這說明這個函式使用除了go以外的語言實現,這樣的宣告僅定義了該函式的簽名。
go語言中的函式也有型別,其零值為nil,而且它們可以賦給變數或者傳遞或者從其他函式中返回。函式變數可以像其他函式一樣呼叫。
func square(n int) int
f := square
fmt.printf("%t\n", f) //輸出 func(int) int
fmt.println(f(3)) //輸出 9
命名函式只能在包級別的作用域中宣告,但沒有函式名的匿名函式可以在函式體內宣告。特別的是,匿名函式能夠使用外層函式中的變數:
func squares() func() int
}func main()
本文部分內容摘自《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語言 陣列特性 與其他語言不同,go語言陣列預設是按值傳遞,也就是說,陣列變數實際上儲存的是整個陣列而不像其他語言那樣儲存的是指向陣列開頭的指標。因此賦值的時候,如果需要避免額外的記憶體開銷 特別是陣列比較大的情況下 一定要使用取位址符去賦值,而不要直接的使用賦值符號賦值!test string...