iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 10
1
Software Development

Golang入門到進階實戰系列 第 10

Day 函數宣告與使用

前言

Go語言擁有三種類型的函數

  • 普通函數
  • 匿名函數 或者 lambda 函數
  • 方法

我們使用函數將一個複雜的系統分解一系統簡單的任務,每個函數負責執行一個任務。而且每一個函數都可以被重複調用多次。

函數宣告

在Go語言裡,函數的基本組成為:

  • 關鍵字func : 宣告函數所用的關鍵字
  • 函數名 : 後續調用函數時所用的簽名
  • 參數列表:傳遞到函數內部使用的參數,可以是單一參數、多參數、可變參數甚至是無參數。
  • 返回類型:函數的反回值的資料型態,當函數無返回值時省略。
  • 函數體:函數定義的代碼區塊
  • 返回語句:函數體執行完畢後的回傳值,其資料型態必須和宣告時的返回類型一致。
func func_name( <params> ) <return_type> {
    //do something
    
}

函數的返回值

Go語言支持函數有多返回值,可以在函數執行完畢後執行多個參數。順帶一提,在Go語言裡並沒有try、except語句,因此Go語言經常在函數的返回值裡最後一個參數當做錯誤指標,當錯誤指標非nil或false時代表函數執行過程發生錯誤。

舉例來說,我們想要查詢key是否在map裡頭

val, ok := map[key]
if ok!=false {
//key存在map裡,可以繼續執行…
}

在上述代碼裡,map[key]會返回兩個值,第一個是key對應的val,第二個是錯誤參數ok,我們可以透過參數ok是否為false來判斷該key是否存在於map裡頭。

Go語言的設計理念不希望工程師用try、except忽略可能發生異常的代碼,因此用這種錯誤返回參數的方式讓工程師必須提供妥善的錯誤處理。

為返回值宣告變數

Go語言支持在返回值處宣告返回值參數,返回值參數始值化為資料類型的默認值,數值為0,字串為空字串,布林值為false,指針為nil。

當返回值有宣告變數時,函數執行回畢時必須顯式的調用return。

舉個例子,我們在宣告函數時將返回值命名為x,y

func demoReturnVlaues() (x, y int){
    x = 10 //宣告函數時已定義返回數參數,因此可以在函數體內直接使用
    y = 20
    return //必須要顯式調用return
}

如果我們在return語句也像一般函數給予返回參數是合法的。

func demoReturnVlaues() (x, y int){
    x = 10 
    return a, 20
}

需要注意的是宣告函數時返回參數不能和返回類型的語法混用,會發生編釋錯誤,如下,

func demoReturnVlaues() (x, y int, float)

可變參數

當我們不知道函數的傳入參數個數多少時,可以使用可變參數列表,讓函數接受任意個傳入參數。Go語言內建的fmt.Print函數就是可變參數函數的一個例子。

可變參數宣告時,必須在參數的資料型態前加上...,例如...int或...string,且可變參數必須是參數列表的最後一個參數。

例如,我們設計一個函數可以接收多個參數並回傳參數的總乘積。

func factorial(nums ...int){
    total :=1
    for _, num := range nums{
        total *= num
    }
    return total
}

調用此函數的結果為

a := factorial(1,2) //a=3
b := factorial(2,3,4) //b=24

上一篇
Day9 流程控制
下一篇
Day11 Go語言編碼規範
系列文
Golang入門到進階實戰30

尚未有邦友留言

立即登入留言