Go語言之函數
函數就是一塊執行特定任務的程式碼,在輸入源的基礎上通過一些演算法生成預期的輸出。
一、函數的聲明
Go 語言中的函數聲明語法如下:
func 函數名(參數名 類型,參數名 類型)(返回值1類型,返回值2類型){
函數體內容
return 返回值1,返回值2
}
注意:函數中的參數列表和返回值不是必須的
二、函數的定義方式
1、有參數無返回值
func add(a int, b int) {
fmt.Println(a + b)
}
2、有參數無返回值,有多個相同類型參數
func add(a, b int) {
fmt.Println(a + b)
}
3、有參數無返回值,有多個相同類型參數,也有不同類型
func add(a, b int, msg string) {
fmt.Println(a + b)
fmt.Println(msg)
}
4、多個參數,一個返回值
func add(a, b int) int {
return a + b
}
5、多個參數,多個返回值
func add(a, b int) (int, int) {
return a + b, a * b
}
6、命名返回值
func add(a, b int) (c int, d int) {
c = a + b
d = a * b
return // 這個時候不需要在寫c,d了
}
7、函數返回值為函數(函數是一等公民,函數可以賦值給變數)
func test() func() {
return func() {
fmt.Println("我是返回函數")
}
}
8、函數返回值為函數,返回的函數帶參數
func test() func(msg string) { // 類型只要有不一樣的地方,就不是一個類型
return func(msg string) {
fmt.Println(msg)
}
}
9、函數返回值為函數,返回的函數帶參數,帶返回值
func test() func(a,b int) int{
return func(a,b int) int {
return a+b
}
}
10、函數參數為函數類型,返回值為帶參數,帶返回值的函數類型
package main
import "fmt"
func main() {
var c = f
a,b := test(c)(3,4)
fmt.Println(a, b)
}
func test(f func()) func(a, b int) (int, int) {
return func(a, b int) (int, int) {
f()
return a + b, a * b
}
}
func f() {
fmt.Println("我是函數參數")
}
11、閉包函數:定義在函數內部,對外部作用域有引用
閉包函數就是多了一種函數傳參的方法
func test(age int) func() {
a := func() {
fmt.Println(age)
}
return a // a就是閉包函數
}
12、匿名函數(定義在函數內部的函數,不能是有名函數,頭等函數)
var a func()
a = func (){
fmt.Println("我是匿名函數")
}
a()
13、空白符( _ 在Go中被用作空白符,可以用來表示任何類型的任何值)
package main
import "fmt"
func main() {
_, b := test(3, 5)
fmt.Println(b) // 返回 15
}
func test(a, b int) (int, int) {
return a + b, a * b
}