初識Go Day7 函式

2021-10-12 11:12:28 字數 3128 閱讀 1453

函式宣告包括函式名、形式引數列表、返回值列表(可省略)以及函式體。

func

functionname

([parameter list]

)[returntypes]

例1:

下面的函式是用於求兩個數的和

func

getsum

(num1 int

, num2 int

)int

這個函式傳遞了兩個引數,分別為num1num2,並且他們都為int型別,將相加後的結果進行返回。

上面這個函式還可以這樣定義

func

getsum1

(num1, num2 int

)int

當num1和num2是相同型別的時候我們可以省略掉前面的型別,go編譯器會自動進行推斷。

因為在go語言中存在值型別與引用型別,所以在函式引數進行傳遞時也要注意這個問題。

例2:

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

1003

]main:

1100[1

1003

]

在go語言中也支援變長引數,但需要注意的是變長引數必須放在函式引數的最後乙個,否則會報錯。

下面這段**演示了如何使用變長引數

例3:

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

}

func

printf

(format string

, a ...

inte***ce

)(n int

, err error

)

上面這段**暫時看不懂也沒關係,但是只需要記住,當你想傳遞給函式的引數不能確定有多少時可以使用變長引數。

go語言中函式還支援乙個特性那就是:多返回值。通過返回結果與乙個錯誤值,這樣可以使函式的呼叫者很方便的知道函式是否執行成功,這樣的模式也被稱為command,ok模式,在我們未來的程式設計中也推薦大家使用這種方式。下面這段**顯示了如何操作多返回值。

例4:

func

div(a, b float64)(

float64

,error

)return a / b,

nil}

func

main()

fmt.

println

("result: "

, result)

}

也可以下面這種模式

func

main()

else

}

注:多返回值需要使用()進行標記。

除了上面支援的多返回值,在go語言中還可以給返回值命名,當需要返回的時候,我們只需要一條簡單的不帶引數的return語句。我們將上面那個除法的函式修改一下

例5:

func

div(a, b float64

)(result float64

, err error

) result = a / b

return

}

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

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

例6:

func

main()

fmt.

println(f

())}

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

例7:

func

add(

)func

(int

)int

}func

main()

程式輸出結果如下:

string1 11

string12 13

string123 16

string1 11

string12 13

string123 16

如果不了解的閉包肯定會覺得很奇怪,為什麼會輸出這樣的結果。這就要用到我最開始的解釋。閉包就是乙個函式和乙個函式外的變數的封裝,而且這個變數就對應著類中的靜態變數。這樣就可以將這個程式的輸出結果解釋的通了。

在go語言學習筆記中,雨痕提到在彙編**中,閉包返回的不僅僅是匿名函式,還包括所引用的環境變數指標,這與我們之前的解釋也是類似的,閉包通過操作指標來呼叫對應的變數。

小問題:

嘗試一下如何通過閉包來實現斐波那契數列。

7 初識函式

1 include 2 include 34 定義溫度轉換函式,包含乙個浮點型 簡單的理解就是可以是小數 引數n5 函式的返回值也是浮點型,在輸入乙個華氏攝氏度值之後輸出對應的攝氏度值67 float c change float n 8 9int main 1019 20float c chang...

next permutation函式初識

include define max m 10 define max n 10 using namespace std bool used max n int perm max m 生成的n!種排列 void permutation1 int pos,int n 針對perm的第pos個位置,究竟使...

main函式初識

int main int argc,char const argv int argc 整數,代表引數的個數 char const argv 指向字串的指標陣列,argv 0 自身程式執行的目錄路勁與程式名,argv 1 argv 2 代表引數 其引數是通過外界指令傳入。在linux環境之下,是she...