溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言函數(shù)怎么定義與使用

發(fā)布時間:2022-11-03 10:18:45 來源:億速云 閱讀:112 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Go語言函數(shù)怎么定義與使用的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    1.前言

    函數(shù)是一段代碼的片段,包含連續(xù)的執(zhí)行語句,它可以將零個或多個輸入?yún)?shù)映射到零個或多個參數(shù)輸出。函數(shù)像一個黑盒,對它的使用者隱藏實現(xiàn)細節(jié)。還可以在代碼中通過函數(shù)調(diào)用來執(zhí)行它們。

    學到現(xiàn)在,我們使用的 Go 函數(shù)只有 main 函數(shù):

    func main() {
    }

    2.函數(shù)聲明

    每個函數(shù)都包含 func 關鍵字、函數(shù)名、輸入?yún)?shù)列表、一個可選的返回列表以及函數(shù)體

    func name(parameter-list) (result-list) {
        function body
    }
    • func 關鍵字:Go 語言使用 func 關鍵字來聲明一個函數(shù)。類似 Python 的 def 關鍵字。

    • 函數(shù)名:緊跟 func 關鍵字后的事函數(shù)名稱,函數(shù)名必須是一個標識符,即不能跟 Go 語言關鍵字沖突

    • 輸入?yún)?shù)列表(形參列表):輸入?yún)?shù)聲明列表必須用一對小括號括起來,指定一組變量的參數(shù)名參數(shù)類型,這些局部變量都由調(diào)用者提供的實參傳遞而來。

    • 輸出結(jié)果列表(返回列表):指定了函數(shù)返回值的類型。當函數(shù)返回一個未命名的返回值或者沒有返回值的時候,返回列表的圓括號可以省略。在 Go 中,一個函數(shù)可以有多個返回值。

    • 函數(shù)體:函數(shù)體必須用一對大括號括起來。一對大括號和它其間的代碼形成了一個顯式代碼塊。在一個函數(shù)體內(nèi), return 關鍵字可以用來結(jié)束此函數(shù)的正常執(zhí)行流程并進入此函數(shù)的退出階段。

    2.1 函數(shù)例子

    接下來,看一個簡單的 Go 整數(shù)計算器的 加、減、乘、除 函數(shù)的例子。

    package main
    
    import "fmt"
    
    func add(num1 int, num2 int) (num3 int) {
        num3 = num1 + num2
        return
    }
    
    func subtract(num1 int, num2 int) int {
    
        num3 := num1 - num2
        return num3
    }
    
    func multiply(num1 int, num2 int) int {
        result := num1 * num2
        return result
    }
    
    func divide(num1 int, num2 int) (result int) {
        if num2 != 0 {
            result = num1 / num2
        } else {
            panic("division by zero")
        }
        return result
    }
    
    func main() {
    
        fmt.Printf("2021 + 19 = %d\n", add(2021, 19))
        fmt.Printf("2021 - 19 = %d\n", subtract(2021, 19))
        fmt.Printf("2021 * 19 = %d\n", multiply(2021, 19))
        fmt.Printf("2021 / 19 = %d\n", divide(2021, 19))
        // fmt.Printf("2021 / 0 = %d\n", divide(2021, 0))
    }

    結(jié)果為:

    2021 + 19 = 2040
    2021 - 19 = 2002
    2021 * 19 = 38399
    2021 / 19 = 106

    如果我們除以 0 的話,調(diào)用了一個叫做 panic 的內(nèi)置函數(shù),該函數(shù)會導致一個運行時的錯誤。還會得到一個異常,異常也會在接下來的博客中學習到。

    panic: division by zero
    
    goroutine 1 [running]:
    main.divide(...)
    ...

    2.2 Go 函數(shù)支持多返回值

    Go 支持一個函數(shù)返回多個值:

    func f() (int, int){
        return 2014, 2021
    }
    
    func main() {
        x, y := f()
    }

    這里需要做三個改變:

    • 返回類型改變:多個返回類型用多個逗號,分隔的類型,

    • 改變 return 后的表達式:使其包含多個逗號, 的表達式,

    • 最后改變賦值語句,使多個值都在 :== 的左邊

    多個返回值一般用于返回 error,例如 (x, err := f()) , 或者返回一個布爾值表示成功,如 (x, ok := f()) .

    2.3 變量函數(shù)

    對于 Go 函數(shù)中的最后一個參數(shù),有一種特殊的形式可以使用:

    func add(args ...int) int {
        total := 0
        for _, v := range args {
            total += v
        }
        return total
    }
    
    func main() {
        fmt.Println(add(1,2,3))
    }

    通過在最后一個參數(shù)的類型名稱前使用 ... ,你可以表示它需要零個或多個這些 參數(shù)。在這種情況下,我們需要零個或多個整數(shù)。我們像其他函數(shù)一樣調(diào)用該函數(shù),而且可以傳遞我們想要的任何數(shù)量的變量。

    這正是 fmt.Println 函數(shù)的實現(xiàn)方式:

    func Println(a ...interface{}) (n int, err error)

    Println() 函數(shù)可以接受任何數(shù)量的任何類型的值。我們也可以通過在 slice 后面加上 ... 來傳遞一個 ints 的 slice 。

    func main() {
        s1 := []int{1,2,3}
        fmt.Println(add(s1...))
    }

    2.4 閉包

    可以在函數(shù)內(nèi)部創(chuàng)建函數(shù)。

    func main() {
        add := func(x, y int) int {
            return x + y
        }
        fmt.Println(add(1,1))
    }

    add 是一個局部變量,其類型為 func(int, int) int(一個函數(shù)接收兩個 int 參數(shù),并返回一個 int 參數(shù))。當你創(chuàng)建一個像這樣的局部函數(shù)時,它還可以訪問其他局部變量。

    2.5 遞歸

    最后,一個函數(shù)能夠調(diào)用自己。下面是一種方法來計算一個數(shù)字的階乘。

    package main
    
    import "fmt"
    
    func factorial(x uint) uint {
        if x == 0 {
            return 1
        }
    
        return x * factorial(x-1)
    }
    
    func main() {
        fmt.Println(factorial(4))
    }

    閉包和遞歸是強大的編程技術(shù),它構(gòu)成了被稱為函數(shù)式編程的范式的基礎。大多數(shù)人都會發(fā)現(xiàn)函數(shù)式編程比以下方法更難理解:for 循環(huán)、if 語句、變量和簡單函數(shù)的方法。

    以上就是“Go語言函數(shù)怎么定義與使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI