Go程式設計學習 函式

2021-10-12 12:26:47 字數 3383 閱讀 5882

定義方式如下:

func

funcname

([parameter list]

)[returntypes]

其中返回值型別和引數都是可選的

go語言不支援預設值引數

不支援函式過載

不支援命名函式的巢狀定義,但支援巢狀匿名函式

舉例:

func

getsum

(num1 int

,num2 int

)int

//也可以定義為如下格式,引數相同型別省略掉前邊的,編譯器自動推斷

func

getsum1

(num1, num2 int

)int

go函式實參到形參永遠是值拷貝,所以實現引用傳遞可以通過傳遞指標變數的方式

func

paramfunc

(a int

, b *

int, c [

]int

)func

main()

paramfunc

(a,&b, c)

fmt.

println

("main:"

) fmt.

println

(a) fmt.

println

(b) fmt.

println

(c)}

/*輸出

paramfunc:

100100

[1 100 3]

main:

1100

[1 100 3]

*/

go語言中支援變長引數。

注意:

func

main()

x :=

min(slice...

) fmt.

printf

("the minimum is: %d"

, x)

}func

min(s ...

int)

int min := s[0]

for_

, v :=

range s

}return min

}

go 函式支援多值返回,定義多值返回的返回引數列表時要使用「()」包裹,支援命名引數

的返回。

func

swap

(a,b int)(

int,

int)

若返回結果與乙個錯誤值,這樣可以使函式的呼叫者很方便的知道函式是否執行成功,這樣的模式也被稱為command,ok模式,未來的程式設計中也推薦使用這種方式。

func

div(a, b float64)(

float64

,error

)return a / b,

nil}

func

main()

fmt.

println

("result: "

, result)

}

在go語言中還可以給返回值命名,當需要返回的時候,只需要一條簡單的不帶引數的return語句

func

div(a, b float64

)(result float64

, err error

) result = a / b

return

}

即使只有乙個命名返回值,也需要使用()括起來

匿名函式如其名字一樣,是乙個沒有名字的函式,除了沒有名字外其他地方與正常函式相同。匿名函式可以直接呼叫,儲存到變數,作為引數或者返回值。

package main

import

"fmt"

//匿名函式被直接賦值函式交量

var sum=

func

(a , b int

)int

func

doinput

(f func

(int

,int

)int

, a , b int

)int

//匿名函式作為返回值

func

wrap

(op string

)func

(int

,int

)int

case

"sub"

:return

func

(a , b int

)int

default

:return

nil}

}func

main()

}()sum(1

,2)//匿名函式作為實參

out :=

doinput

(func

(x, y int

)int,1

,2) opfunc :=

wrap

("add"

) re :=

opfunc(2

,3) fmt.

println

(out)

//3 fmt.

println

(sum(1

,2))

//3 fmt.

printf

("%d\n"

, re)

//5}

閉包可以解釋為乙個函式與這個函式外部變數的乙個封裝。粗略的可以理解為乙個類,類裡面有變數和方法,其中閉包所包含的外部變數對應著類中的靜態變數。為什麼這麼理解,先看乙個例子:

func

add(

)func

(int

)int

}func

main()

/*輸出

string1 11

string12 13

string123 16

string1 11

string12 13

string123 16

*/

解釋:

閉包實現斐波那契數列:

package main

import

"fmt"

func

fib(

)func()

int}

func

main()

}

Go語言函式式程式設計

更加嚴格的定義 函式體中包含自有變數和區域性變數 func adder func int int 這裡的sum就是自由變數,v是區域性變數。在cpp中同樣支援閉包 auto adder 在python中也是支援的 def adder sum 0 deff value nonlocal sumsum ...

Go函式學習

1 package main23 import 4 fmt 5 reflect 6 runtime 7 math 8 910 函式11 函式可以返回兩個值。返回多個值時可以起名字 12 返回值型別寫在最後面 13 函式可以作為引數 14 沒有預設引數,可選引數 1516 func eval a,b ...

《Go語言程式設計》學習筆記

1.變數 var v1 int var v2 string var v3 10 int 陣列 var v4 int 陣列切片 var v5 struct var v6 int 指標 var v7 map string int map,key為string型別,value為int型別 var v8 f...