在go語言中還有另外一種定義使用函式的方式,就是函式型別,所謂的函式型別就是將函式作為一種型別可以用來定義變數,這種用法類似於前面我們講過的int ,float64,string等型別,這些型別都是可以用來定義變數。基本語法如下:
package main
import
"fmt"
func test(a,b int)(sum int)
type functype func(a, b int) int
func main()
func
main()
輸出結果是9,為什麼呢?
在執行fmt.println(a)語句之前,我們已經呼叫了函式test(),並在該函式中我們已經重新給變數a賦值了。但是為什麼結果沒有發生變化呢?這就是變數的作用範圍(作用域)的問題。在test( )函式中定義的變數a,它的作用範圍只在改函式中有效,當test( )函式執行完成後,在該函式中定義的變數也就無效了。也就是說,當test( )函式執行完以後,定義在改函式中所有的變數,所占有的記憶體空間都會被**。所以,我們把定義在函式內部的變數稱為區域性變數。
區域性變數的作用,為了臨時儲存資料需要在函式中定義變數來進行儲存,這就是它的作用。並且,通過上面的案例我們發現:不同的函式,可以定義相同的名字的區域性變數,但是各用個的不會產生影響。例如:我們在main( )函式中定義變數a,在test( )函式中也定義了變數a,但是兩者之間互不影響,就是因為它們屬於不同的函式,作用範圍不一樣,在記憶體中是兩個儲存區域。
接下來讓我們看另一種
package main
import
"fmt"
var a int
func test()
func main()
輸出結果是6,我們在函式外面定義了變數a,那麼該變數就是全域性變數,並且test( )函式和main( )函式都可以使用該變數。該程式的執行流程是:先執行main( )函式,給變數a賦值為9,緊接著呼叫test( )函式,在改函式中完成對變數a的修改。
由於main( )函式與test( )函式所使用的變數a是同乙個,所以當test( )函式執行完成後,變數的a已經變成了6. 回到main( )函式執行後面的**,也就是 fmt.println(a),輸出的值就是6。所謂的全域性變數:既能在乙個函式中使用,也能在其他的函式中使用,這樣的變數就是全域性變數.也就是定義在函式外部的變數就是全域性變數。全域性變數在任何的地方都可以使用。
go語言學習筆記 函式
go語言的函式定義更像是python和c語言的結合體,並且也有不定引數的傳參以及位址傳參方式,非常強大。下面舉一些例子來詳細說明 無參無返回值函式 func myfunc 有參無返回值函式 func myfunc1 a int b int 如果同樣型別,可以簡寫成以下內容 func myfunc2 ...
Go語言學習筆記 函式
函式 函式是各個語句指令的集合,可以實現指定的功能,可以重複使用 定義 func 函式名 引數名 引數型別 返回值名 返回值型別 func x,y int 10,20 匿名函式自呼叫,在後面加上括號簡單來說就是 閉包 函式 匿名函式 引用環境 func adder func int int defe...
Go語言學習筆記 內建函式
go中的預定義函式 go中的預定義函式 close newpanic complex delete make recover real lenprint imag capcopy printlnclose 用於channel的通訊,使用它來關閉channel delete 用於map中刪除例項 le...