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
}
Tags: