函式宣告包括函式名、形式引數列表、返回值列表(可省略)以及函式體。
func
functionname
([parameter list]
)[returntypes]
例1:
下面的函式是用於求兩個數的和
func
getsum
(num1 int
, num2 int
)int
這個函式傳遞了兩個引數,分別為num1
與num2
,並且他們都為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...