Go語言入門教程(十)之函數

  • 2019 年 10 月 9 日
  • 筆記

Hello 各位小夥伴大家好,我是小棧君,假期一眨眼就過去了。不知道大家玩的是否開心呢?

上次我們講到了關於Go語言的流程式控制制,小棧君也希望小夥伴跟著小棧君一步一個腳印的敲一下程式碼,相互進步。本期我們要分享的Go語言系列之函數。

一、什麼是函數?

函數是指一段在一起的、可以做某一件事兒的程式。也叫做子程式、(OOP中)方法。

一個較大的程式一般應分為若干個程式塊,每一個模組用來實現一個特定的功能。所有的高級語言中都有子程式這個概念,用子程式實現模組的功能。

在C語言中,子程式的作用是由一個主函數和若干個函數構成。由主函數調用其他函數,其他函數也可以互相調用。同一個函數可以被一個或多個函數調用任意多次。

在程式設計中,常將一些常用的功能模組編寫成函數,放在函數庫中供公共選用。要善於利用函數,以減少重複編寫程式段的工作量

二、函數之函數定義

所以綜上所述我們可以知道函數構成程式碼執行的邏輯結構。在Go語言中,函數的基本組成為:關鍵字func、函數名、參數列表、返回值、函數體和返回語句。

所以函數的通用格式如下:

file

函數定義說明:

func:函數由關鍵字 func 開始聲明

funcName:函數名稱,根據約定,函數名首字母小寫即為private,大寫即為public ,注意之前小棧君提醒過各位,在go語言中是區分大小寫的。所以這裡的add是僅本類中使用。

參數列表:函數可以有0個或多個參數,參數格式為:變數名 類型,如果有多個參數通過逗號分隔,不支援默認參數

返回類型:
① 上面返回值聲明了兩個變數名d和e、f、err(命名返回參數),這個不是必須,可以只有類型沒有變數名
② 如果只有一個返回值且不聲明返回值變數,那麼你可以省略,包括返回值的括弧
③ 如果沒有返回值,那麼就直接省略最後的返回資訊
④ 如果有返回值, 那麼必須在函數的內部添加return語句

三、函數之自定義函數

在所有的編程中我們都避免不了自定義函數也稱之為方法。以此來確保我們業務的順利進行,自定義函數的好處就是可以復用,避免程式碼臃腫,邏輯混亂,提高程式碼的閱讀性。

所以在go語言的自定義函數中我們可以分為以下幾個種類,無參無返回值、有參無返回值、無參有返回值、有參有返回值這幾種。

無參無返回值

func Test() { //無參無返回值函數定義          fmt.Println("hello  i am itCarry")  }    func main() {          Test() //無參無返回值函數調用  }

有參無返回值

func Test01(a int, b int) { //方式1          fmt.Printf("a = %d, b = %dn", a, b)  }    func Test02(a, b int) { //方式2, v1, v2都是int類型          fmt.Printf("a = %d, b = %dn", a, b)  }    func main() {          Test01(10, 20) //函數調用          Test02(11, 22) //函數調用  }

不定參數列表

所謂的不定參數列表就是指傳參的個數不確定,有可能是一個或多個,所以為了滿足這點我們需要將傳參設定為不定參數,和其他程式語言一樣,我們這裡用三個點表示(即…),記住要用英文的哦。

知識點:形如…type格式的類型只能作為函數的參數類型存在,並且必須是最後一個參數

func Test(args …int) {
for _, n := range args { //遍歷參數列表
fmt.Println(n)
}
}

func main() {
//函數調用,可傳0到多個參數
Test()
Test(1)
Test(1, 2, 3, 4)
}

四、函數之不定參數傳遞

// 定義函數 一  func MyFunc01(args ...int) {  fmt.Println("MyFunc01")  for _, n := range args { //遍歷參數列表      fmt.Println(n)          }  }  // 定義函數 二  func MyFunc02(args ...int) {  fmt.Println("MyFunc02")  for _, n := range args { //遍歷參數列表      fmt.Println(n)  }  }  // 定義函數 三  func Test(args ...int) {          MyFunc01(args...)     //按原樣傳遞, Test()的參數原封不動傳遞給MyFunc01          MyFunc02(args[1:]...) //Test()參數列表中,第1個參數及以後的參數傳遞給MyFunc02  // PS: 這裡運用了一個之後的知識點 就是關於Go語言的切片  }  // 調用函數 三  func main() {          Test(1, 2, 3) //函數調用  }

所以我們也是可以看到函數中可以調用函數,構成新的函數。所以我們只要妥善處理好函數之間的關係我們就可以構建出高效率、高品質、高可用的程式碼啦。

好啦,今天的分享就到這裡了,對於這一方面還需要各位小夥伴下來後好好琢磨一下。


往期精彩回顧

Go語言入門教程(一)
Go語言入門教程(二)
Go語言入門教程(三)
Go語言系列教程(四)
Go語言系列教程(五)
Go語言系列教程(六)

這裡每天會分享包含java,go,Python,大數據,人工智慧的相關乾貨,我們一起提高,一起進步。我是小棧君,我們明天再見,拜了個拜。

file